public void IncomingDataToReceiver() { int messageTarget = 1; string messageData = "Test message data"; Message expectedMessage = new Message { id = messageTarget, stringData = messageData }; Message sourceMessage = new Message { id = messageTarget, stringData = messageData }; ProtoBufPresentation pbPres = new ProtoBufPresentation(); DummyMessageReceiver receiver = new DummyMessageReceiver(expectedMessage); pbPres.SetReceiver(receiver); byte[] binaryMessage = pbPres.MessageToBinaryData(sourceMessage); IDataLink datalink = NSubstitute.Substitute.For <IDataLink>(); pbPres.IncomingData(binaryMessage, datalink); pbPres.IncomingData(binaryMessage, datalink); byte[] firstHalf = new byte[6]; byte[] secondHalf = new byte[binaryMessage.Length - 6]; Array.Copy(binaryMessage, 0, firstHalf, 0, 6); Array.Copy(binaryMessage, 6, secondHalf, 0, binaryMessage.Length - 6); pbPres.IncomingData(firstHalf, datalink); pbPres.IncomingData(secondHalf, datalink); }
public void CommunicatorSendAndRecieve() { DummyReceiver receiver = new DummyReceiver(); ProtoBufPresentation pp = new ProtoBufPresentation(); pp.SetReceiver(receiver); DummyDataLink datalink = new DummyDataLink(pp); Communicator com = new Communicator(datalink, pp); Message sendMessage = new Message { id = 2, stringData = "Message data..." }; Assert.True(com.SendCommand(sendMessage)); // No need to wait; a dummy data link is used so sending command is followed up with incomingmessage Assert.NotNull(receiver.incomingMessage); Assert.AreEqual(receiver.incomingMessage.id, sendMessage.id); Assert.AreEqual(receiver.incomingMessage.stringData, sendMessage.stringData); }
public void MessageToBinaryData() { // Setup ProtoBufPresentation pbPres = new ProtoBufPresentation(); IMessageReceiver receiver = NSubstitute.Substitute.For <IMessageReceiver>(); pbPres.SetReceiver(receiver); int messageTarget = 1; string messageData = "Test message data"; Message sourceMessage = new Message { id = messageTarget, stringData = messageData }; MemoryStream stream = new MemoryStream(); Serializer.Serialize <Message>(stream, sourceMessage); byte[] binaryData = stream.ToArray(); // Serializing byte[] resultData = pbPres.MessageToBinaryData(sourceMessage); // Checking // Size Assert.AreEqual(binaryData.Length, BitConverter.ToInt32(resultData, 0)); // Data for (int i = 0; i < binaryData.Length; i++) { Assert.AreEqual(binaryData[i], resultData[i + sizeof(Int32)]); } }
public void BinaryDataToMessage() { // Setup ProtoBufPresentation pbPres = new ProtoBufPresentation(); IMessageReceiver receiver = NSubstitute.Substitute.For <IMessageReceiver>(); pbPres.SetReceiver(receiver); int messageTarget = 1; string messageData = "Test message data"; Message sourceMessage = new Message { id = messageTarget, stringData = messageData }; MemoryStream stream = new MemoryStream(); Serializer.Serialize(stream, sourceMessage); List <byte> binaryData = new List <byte>(); byte[] data = stream.ToArray(); binaryData.AddRange(BitConverter.GetBytes((Int32)data.Length)); binaryData.AddRange(data); // Deserializing Message result = pbPres.BinaryDataToMessage(binaryData.ToArray()); // Checking Assert.NotNull(result); Assert.AreEqual(result.id, messageTarget); Assert.AreEqual(result.stringData, messageData); }
void Awake() { // TODO: Robots should be initialized somewhere else, initialise dummy objects ProtoBufPresentation pp = new ProtoBufPresentation(); LocalDataLink dl = new LocalDataLink(); Communicator c = new Communicator(dl, pp); shape = null; _rotationSem = new Semaphore(0, 1); _communicator = c; Alive = true; }
public static bool ConnectToUnity(out Communicator communicator, string unityIp, ushort unityPort, int timeout = -1) { communicator = null; //Creates a connection to the robot using the specified hostname and port TcpClient tcpClient = new TcpClient(); IAsyncResult ar = tcpClient.BeginConnect(unityIp, unityPort, null, null); WaitHandle wh = ar.AsyncWaitHandle; try { if (!wh.WaitOne(timeout, false)) { tcpClient.Close(); wh.Close(); return(false); } tcpClient.EndConnect(ar); } catch (SocketException ex) { Console.WriteLine(ex.Message); return(false); } finally { wh.Close(); } IDataLink _dataLink = new TCPDataLink(tcpClient); IPresentationProtocol _protocol = new ProtoBufPresentation(); _dataLink.SetReceiver(_protocol); communicator = new Communicator(_dataLink, _protocol); return(true); }
public void AddDummyBot() { // Debug.Log("Spoofing prereqs..."); ProtoBufPresentation pp = new ProtoBufPresentation(); DummyReceiver dummyReceiver = new DummyReceiver(); pp.SetReceiver(dummyReceiver); DummyDataLink datalink = new DummyDataLink(pp); Communicator com = new Communicator(datalink, pp); //create message, set response MessageTarget_ target = MessageTarget_.Robot; MessageType_ type = MessageType_.CustomMessage; Message DummyMessage = MessageBuilder.CreateMessage(target, type); DummyMessage.SetIdentificationResponse("dummyBot"); /* * First wait for the other identification messages to be processed to prevent race conditions */ if (_ev.WaitOne(10000)) { _ev.Reset(); _connection = com; _newMessage = DummyMessage; _continueRegistration = true; _ev.WaitOne(1000); } }