protected Message ProcessIncomingEnvelope(Envelope env) { if (env.Message.GetType() == typeof(GameIdMessage)) { Logger.Debug("received a GameId message and now creating an Ack Message in ResponPassOff"); //Get the appState GameIdMessage mess = (GameIdMessage)env.Message; //Set the players gameId. playerAppState.gameId = mess.getGameId(); Logger.Debug($"Set gameId to {playerAppState.gameId}"); //Set the players GM EP. playerAppState.GMEndPoint = SubSystem.ParseEPString(mess.getGMEndpoint()); Logger.Debug($"Set the GM endpoint to {mess.getGMEndpoint()}"); //Set the Oponent name if (mess.getP1Name() == playerAppState.playerName) { playerAppState.opponentName = mess.getP2Name(); Logger.Debug($"Set player 2 name to {mess.getP2Name()}"); } else { playerAppState.opponentName = mess.getP1Name(); Logger.Debug($"Set player 1 name to {mess.getP1Name()}"); } return(new AckMessage(999, 0, new Identifier(this.SubSystem.ProcessID, SubSystem.GetNextSeqNumber()), this.ConversationId)); //TODO: ask group about Ack ID message here. } else { Logger.Error($"Did not receive a playerIdMessage, instead received a {env.Message.GetType()}"); } return(null); //Failure to proccess env. }
public void TestEncodeDecode() { short gameId = 1; short p1id = 2; short p2id = 3; string GMendpoint = "127.0.0.1:12343"; string p1name = "Jerry"; string p2name = "John"; bool p1win = true; bool p2win = false; bool p1lose = true; bool p2lose = false; Identifier messageNum = new Identifier(2, 3); Identifier conversationId = new Identifier(231, 232); var OutGoing1 = new GameIdMessage(gameId, p1id, p2id, GMendpoint, p1name, p2name, p1win, p2win, p1lose, p2lose, messageNum, conversationId); var OutGoing2 = new GameIdMessage(); byte[] bytes1 = OutGoing1.encode(); byte[] bytes2 = OutGoing2.encode(gameId, p1id, p2id, GMendpoint, p1name, p2name, p1win, p2win, p1lose, p2lose, messageNum, conversationId); var MT1 = Message.decodeMessageType(bytes1); var MT2 = Message.decodeMessageType(bytes2); Assert.AreEqual((short)7, MT1); Assert.AreEqual((short)7, MT2); var gameIdMessage1 = (GameIdMessage)Message.decoder(bytes1); var gameIdMessage2 = (GameIdMessage)Message.decoder(bytes2); Assert.AreEqual(gameId, gameIdMessage1.getGameId()); Assert.AreEqual(gameId, gameIdMessage2.getGameId()); Assert.AreEqual(p1id, gameIdMessage1.getP1Id()); Assert.AreEqual(p1id, gameIdMessage2.getP1Id()); Assert.AreEqual(p2id, gameIdMessage1.getP2Id()); Assert.AreEqual(p2id, gameIdMessage2.getP2Id()); Assert.AreEqual(GMendpoint, gameIdMessage1.getGMEndpoint()); Assert.AreEqual(GMendpoint, gameIdMessage2.getGMEndpoint()); Assert.AreEqual(p1name, gameIdMessage1.getP1Name()); Assert.AreEqual(p1name, gameIdMessage2.getP1Name()); Assert.AreEqual(p2name, gameIdMessage1.getP2Name()); Assert.AreEqual(p2name, gameIdMessage2.getP2Name()); Assert.AreEqual(p1win, gameIdMessage1.getP1Win()); Assert.AreEqual(p1win, gameIdMessage2.getP1Win()); Assert.AreEqual(p2win, gameIdMessage1.getP2Win()); Assert.AreEqual(p2win, gameIdMessage2.getP2Win()); Assert.AreEqual(p1lose, gameIdMessage1.getP1Lose()); Assert.AreEqual(p2lose, gameIdMessage2.getP2Lose()); Assert.AreEqual(p2lose, gameIdMessage1.getP2Lose()); Assert.AreEqual(p1lose, gameIdMessage2.getP1Lose()); var testIdentifier1 = gameIdMessage1.getMessageNumber(); Assert.IsInstanceOfType(testIdentifier1, typeof(Identifier)); Assert.AreEqual(messageNum.getPid(), testIdentifier1.getPid()); Assert.AreEqual(messageNum.getSeq(), testIdentifier1.getSeq()); var testIdentifier2 = gameIdMessage2.getMessageNumber(); Assert.IsInstanceOfType(testIdentifier2, typeof(Identifier)); Assert.AreEqual(messageNum.getPid(), testIdentifier2.getPid()); Assert.AreEqual(messageNum.getSeq(), testIdentifier2.getSeq()); testIdentifier1 = gameIdMessage1.getConversationId(); Assert.IsInstanceOfType(testIdentifier1, typeof(Identifier)); Assert.AreEqual(conversationId.getPid(), testIdentifier1.getPid()); Assert.AreEqual(conversationId.getSeq(), testIdentifier1.getSeq()); testIdentifier2 = gameIdMessage2.getConversationId(); Assert.IsInstanceOfType(testIdentifier2, typeof(Identifier)); Assert.AreEqual(conversationId.getPid(), testIdentifier2.getPid()); Assert.AreEqual(conversationId.getSeq(), testIdentifier2.getSeq()); byte[] badBytes = new byte[2]; badBytes[0] = 1; badBytes[1] = 1; badBytes = bytes1.Concat(badBytes).ToArray(); try { Message.decoder(badBytes); Assert.Fail(); } catch (Exception e) { Logger.Debug($"Test passed: {e}"); } }