import java.util.*; simple component Server { dynamic port P { provided { void login(String login, String password); void logout(); List getPeers(); void openChannel(String nickName); void sendMessage(String message); void close(); } required { void loginOk(); void loginNotOk(); void openOk(); void openNotOk(); void receiveMessage(String message); void openChannel(); void closedByPeer(); } protocol q1; q1 -> q2 { trigger login; } q2 -> q1 { effect ^out.loginNotOk(); } q2 -> q3 { effect ^out.loginOk(); } q3 -> q1 { trigger logout;} q3 -> q4 { trigger openChannel; } q3 -> q3 { trigger getPeers; } q4 -> q3 { effect ^out.openNotOk(); } q4 -> q5 { effect ^out.openOk(); } q3 -> q5 { trigger wait; effect ^out.openChannel(); } q5 -> q3 { trigger close; } q5 -> q5 { trigger sendMessage; } q5 -> q5 { trigger wait; effect ^out.receiveMessage(); } q5 -> q3 { trigger wait; effect ^out.closedByPeer(); } } } !> } constructor Server() { } void login(P q, String login, String pw) implements P.login(String, String) { } void logout(P q) implements P.logout() { } List getPeers() implements P.getPeers() { return new Vector(); } void sendMessage(P q, String message) implements P.sendMessage(String) { } void openChannel(P q, String login) implements P.openChannel(String) { } void close(P q) implements P.close() { } }