package libcsp.csp.app.clientserver; import javax.realtime.PeriodicParameters; import javax.realtime.PriorityParameters; import javax.safetycritical.PeriodicEventHandler; import javax.safetycritical.StorageParameters; import javax.safetycritical.annotate.Level; import javax.safetycritical.annotate.SCJAllowed; import libcsp.csp.CSPManager; import libcsp.csp.Connection; import libcsp.csp.ImmortalEntry; import libcsp.csp.Packet; import libcsp.csp.Socket; import libcsp.csp.core.ConnectionCore; import libcsp.csp.core.PacketCore; public class ServerHandler extends PeriodicEventHandler { private CSPManager manager; private Socket socket; private Connection connection; public ServerHandler(PriorityParameters priority, PeriodicParameters parameters, StorageParameters scp, long scopeSize, CSPManager manager) { super(priority, parameters, scp, scopeSize); this.manager = manager; socket = manager.createSocket(12, null); } @Override @SCJAllowed(Level.SUPPORT) public void handleAsyncEvent() { connection = socket.accept(ImmortalEntry.TIMEOUT_SINGLE_ATTEMPT); if (connection != null) { Packet p = connection.read(ImmortalEntry.TIMEOUT_SINGLE_ATTEMPT); char data = (char) p.readContent(); Packet response = manager.createPacket(); switch(data) { case 'A': response.setContent((int)'X'); break; case 'B': response.setContent((int)'Y'); break; } connection.send(response); connection.close(); } } }