示例#1
0
        public void TestEncodeDecode()
        {
            string     playerName     = "Joe Ingle";
            Identifier messageNum     = new Identifier(2, 3);
            Identifier conversationId = new Identifier(4, 1);

            var outGoing1 = new PlayerJoinLobbyMessage(playerName, "Public Key", messageNum, conversationId);
            var outGoing2 = new PlayerJoinLobbyMessage();

            byte[] bytes1 = outGoing1.encode();
            byte[] bytes2 = outGoing2.encode(playerName, "Public Key", messageNum, conversationId);

            var MT1 = Message.decodeMessageType(bytes1);
            var MT2 = Message.decodeMessageType(bytes2);

            Assert.AreEqual((short)2, MT1);
            Assert.AreEqual((short)2, MT2);

            var playerJoinLobby1 = (PlayerJoinLobbyMessage)Message.decoder(bytes1);
            var playerJoinLobby2 = (PlayerJoinLobbyMessage)Message.decoder(bytes2);

            Assert.AreEqual(playerName, playerJoinLobby1.getPlayerName());
            Assert.AreEqual(playerName, playerJoinLobby2.getPlayerName());

            var testIdentifier1 = playerJoinLobby1.getMessageNumber();

            Assert.IsInstanceOfType(testIdentifier1, typeof(Identifier));
            Assert.AreEqual(messageNum.getPid(), testIdentifier1.getPid());
            Assert.AreEqual(messageNum.getSeq(), testIdentifier1.getSeq());
            var testIdentifier2 = playerJoinLobby2.getMessageNumber();

            Assert.IsInstanceOfType(testIdentifier1, typeof(Identifier));
            Assert.AreEqual(messageNum.getPid(), testIdentifier2.getPid());
            Assert.AreEqual(messageNum.getSeq(), testIdentifier2.getSeq());

            testIdentifier1 = playerJoinLobby1.getConversationId();
            Assert.IsInstanceOfType(testIdentifier1, typeof(Identifier));
            Assert.AreEqual(conversationId.getPid(), testIdentifier1.getPid());
            Assert.AreEqual(conversationId.getSeq(), testIdentifier1.getSeq());
            testIdentifier2 = playerJoinLobby2.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}");
            }
        }
示例#2
0
        protected Message ProcessIncomingEnvelope(Envelope env)
        {
            this.IncomingEnvelopes.Enqueue(env);
            Identifier messageNumber = new Identifier(SubSystem.ProcessID, SubSystem.GetNextSeqNumber());

            short  ID        = SubSystem.GetNextProcessId();
            string publicKey = "";

            //Adding Player to lobby
            if (env.Message.GetType() == typeof(PlayerJoinLobbyMessage))
            {
                PlayerJoinLobbyMessage playerJoinLobbyMessage = (PlayerJoinLobbyMessage)env.Message;
                ((LobbyAppState)SubSystem.appState).addPlayer(env.From, ID, playerJoinLobbyMessage.getPlayerName());
                publicKey = playerJoinLobbyMessage.getPublicKey();

                Console.WriteLine($"Recieved a PlayerJoinLobbyMessage from a player named {((PlayerJoinLobbyMessage)env.Message).getPlayerName()}");
                Logger.Debug($"Recieved a PlayerJoinLobbyMessage from a player named {((PlayerJoinLobbyMessage)env.Message).getPlayerName()}");
            }
            //Adding GM to lobby
            else if (env.Message.GetType() == typeof(GMJoinLobbyMessage))
            {
                GMJoinLobbyMessage gMJoinLobbyMessage = (GMJoinLobbyMessage)env.Message;
                IPEndPoint         GMEP = new IPEndPoint(env.From.Address, gMJoinLobbyMessage.getPort());
                publicKey = gMJoinLobbyMessage.getPublicKey();

                ((LobbyAppState)SubSystem.appState).addGM(env.From, GMEP, ID);
                Console.WriteLine($"Recieved a GMJoinLobby message from a GM");
                Logger.Debug($"Recieved a GMJoinLobby message from a GM");
            }

            Tuple <byte[], byte[]> rm      = ((LobbyAppState)SubSystem.appState).encryptSysKeys(publicKey);
            AssignIdMessage        message = new AssignIdMessage(ID, rm.Item1, rm.Item2, messageNumber, this.ConversationId);

            // set the assignIdmessage attribute of encrypted key here
            // need to set an attribute in assignIdMessage that will
            ((LobbyAppState)SubSystem.appState).gameIsReady();

            return(message);
        }