value Virtual_Environment is abstraction () { //external interfaces Sense_Request : Connection[view[agent_id : String, foci : sequence[view[focus_name : String, focus_params : sequence[String]]]]]; Sense_Result : Connection[any]; Act : Connection[view[agent_id : String, action_name : String, action_params : sequence[String]]]; Send_Receive : Connection[view[ID : Integer, sender : String, receiver : String, performative : String, content : String]]; Operate : Connection[any]; Synchronize : Connection[any]; Observe : Connection[any]; Transmit_Deliver : Connection[any]; //exchanged data sense_request : view[agent_id : String, foci : sequence[view[focus_name : String, focus_params : sequence[String]]]]; sense_result : any; action : view[agent_id : String, action_name : String, action_params : sequence[String]]; message_in : view[ID : Integer, sender : String, receiver : String, performative : String, content : String]; message_out : view[ID : Integer, sender : String, receiver : String, performative : String, content : String]; state_item : sequence[view[name : String, val : any]]; operation : any; sync_requets : any; sync_update : any; observation_request : any; observation_result : any; transmit_msg : any; deliver_msg :any; //connections among the components C_Read_Write : Connection[sequence[view[name : String, val : any]]]; //component composition compose { via CommunicationService send Void where { Send_Receive renames Send_Receive, C_Read_Write renames Read_Write, Transmit_Deliver renames Transmit_Deliver}; and via ActionService send Void where { Act renames Act, C_Read_Write renames Read_Write, Operate renames Operate}; and via PerceptionService send Void where { Sense_Request renames Sense_Request, Sense_Result renames Sense_Result, C_Read_Write renames Read_Write, Observe renames Observe}; and via State send Void where { C_Read_Write renames Read_Write}; and via Dynamics send Void where { C_Read_Write renames Read_Write}; and via Synchronization send Void where { C_Read_Write renames Read_Write, Synchronize renames Synchronize}; } } value CommunicationService is abstraction () { Send_Receive : Connection[view[ID : Integer, sender : String, receiver : String, performative : String, content : String]]; Transmit_Deliver : Connection[any]; Read_Write : Connection[sequence[view[name : String, val : any]]]; message_in : view[ID : Integer, sender : String, receiver : String, performative : String, content : String]; message_out : view[ID : Integer, sender : String, receiver : String, performative : String, content : String]; state_item : sequence[view[name : String, val : any]]; deliver_in : any; transmit_out : any; choose { //send message via Send_Receive receive message_out; unobservable; via Transmit_Deliver send transmit_out; or //deliver message via Transmit_Deliver receive deliver_in; unobservable; via Send_Receive send message_in; } } value ActionService is abstraction () { Act : Connection[view[agent_id : String, action_name : String, action_params : sequence[String]]]; Operate : Connection[any]; Read_Write : Connection[sequence[view[name : String, val : any]]]; action : view[agent_id : String, action_name : String, action_params : sequence[String]]; state_item : sequence[view[name : String, val : any]]; operation : any; via Act receive action; choose { //state update unobservable; or //operation unobservable; via Operate send operation; } } value PerceptionService is abstraction () { Sense_Request : Connection[view[agent_id : String, foci : sequence[view[focus_name : String, focus_params : sequence[String]]]]]; Sense_Result : Connection[any]; Observe : Connection[any]; Read_Write : Connection[sequence[view[name : String, val : any]]]; sense_request : view[agent_id : String, foci : sequence[view[focus_name : String, focus_params : sequence[String]]]]; sense_result : any; state_item : sequence[view[name : String, val : any]]; observation_request : any; observation_result : any; via Sense_Request receive sense_request; choose { //read state repository unobservable; via Sense_Result send sense_result; or //observation unobservable; via Observe send observation_request; unobservable; via Observe receive observation_result; unobservable; via Sense_Result send sense_result; } } value State is abstraction () { Read_Write : Connection[sequence[view[name : String, val : any]]]; read_request : sequence[view[name : String, val : any]]; read_item : sequence[view[name : String, val : any]]; write_item : sequence[view[name : String, val : any]]; replicate { choose { //read item via Read_Write receive read_request; unobservable; via Read_Write send read_item; or //write item via Read_Write receive write_item; unobservable; } } } value Dynamics is abstraction () { Read_Write : Connection[sequence[view[name : String, val : any]]]; read_request : sequence[view[name : String, val : any]]; read_item : sequence[view[name : String, val : any]]; write_item : sequence[view[name : String, val : any]]; replicate { via Read_Write send read_request; unobservable; via Read_Write receive read_item; unobservable; via Read_Write send write_item; } } value Synchronization is abstraction () { Read_Write : Connection[sequence[view[name : String, val : any]]]; Synchronize : Connection[any]; read_request : sequence[view[name : String, val : any]]; read_item : sequence[view[name : String, val : any]]; write_item : sequence[view[name : String, val : any]]; sync_request : any; sync_update : any; replicate { choose { //send synchronization request unobservable; via Synchronize send sync_request; or via Synchronize receive sync_update; unobservable; } } }