program { agents_ : []; main() { "Message Server starting...\n" >> stdout; while true do receive { 'register ->> { "Agent " ++ sender^0 ++ " registered\n" >> stdout; ('message, self(), "Agent " ++ sender^0 ++ " has joined.") >>* agents_; ('message, self(), "Welcome!") >> replyto; ('message, self(), "Local agents: " ++ agents_^0 ) >> replyto; agents_ := [sender,..agents_]; } | 'unregister ->> { "Agent " ++ sender^0 ++ " unregistered\n" >> stdout; agents_ := agents_ reject sender; ('message, self(), "Agent " ++ sender^0 ++ " has left.") >>* agents_; } | ( 'broadcast, string?msg ) ->> { ( 'message, sender, msg ) >>* agents_; } } }; } execute main;