package visualiser.gameController; import network.BinaryMessageEncoder; import network.Exceptions.InvalidMessageException; import network.MessageEncoders.RaceVisionByteEncoder; import network.Messages.AC35Data; import network.Messages.BoatAction; import network.Messages.Enums.BoatActionEnum; import network.Messages.Enums.MessageType; import visualiser.gameController.Keys.ControlKey; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.net.SocketException; import java.nio.ByteBuffer; import java.util.concurrent.BlockingQueue; import java.util.logging.Level; import java.util.logging.Logger; /** * Basic service for sending key presses to game server */ public class ControllerClient { /** * Queue of messages to be sent to server. */ private BlockingQueue outgoingMessages; /** * Initialise controller client with live socket. * @param outgoingMessages Queue to place messages on to send to server. */ public ControllerClient(BlockingQueue outgoingMessages) { this.outgoingMessages = outgoingMessages; } /** * Send a keypress to server * @param key to send * @throws InterruptedException If thread is interrupted while writing message to outgoing message queue. */ public void sendKey(ControlKey key) throws InterruptedException { BoatActionEnum protocolCode = key.getProtocolCode(); if(protocolCode != BoatActionEnum.NOT_A_STATUS) { BoatAction boatAction = new BoatAction(protocolCode); outgoingMessages.put(boatAction); } } }