示例#1
0
        private static void Handshake(NetworkGameClient client)
        {
            GameMessage hello = client.WaitReceive();

            if (hello.ContentType != typeof(HandshakeEvent))
            {
                throw new Exception("client expected handshake");
            }

            HandshakeEvent handshake        = hello.DeserializeContent <HandshakeEvent>();
            string         handshakeMessage = handshake.HandshakeMessage;

            // send it back to server to ack
            client.Send(new GameMessage(new HandshakeEvent(handshakeMessage)));
            Debug.Log("Handshake complete.");
        }
示例#2
0
        public static void Main(string[] args)
        {
            var client = new NetworkGameClient();

            Handshake(client);

            while (true)
            {
                GameMessage received = client.WaitReceive();

                if (received.ContentType == typeof(ServerCloseSessionEvent))
                {
                    Debug.Log("The server has ended the session.");
                    return;
                }
                else
                {
                    AEvent _event = received.ToEvent();
                    Debug.Log(_event.Description);
                }
            }
        }
        public void CreateAndJoinGame()
        {
            var client1 = new NetworkGameClient();
            var client2 = new NetworkGameClient();

            // Connect
            Assert.IsTrue(client1.Connect("127.0.0.1", 3221).GetAwaiter().GetResult());
            Assert.IsTrue(client2.Connect("127.0.0.1", 3221).GetAwaiter().GetResult());
            // Login
            Assert.AreEqual(LoginCheckResult.LoginOK, client1.Login("P1", "", false).GetAwaiter().GetResult());
            Assert.AreEqual(LoginCheckResult.LoginOK, client2.Login("P2", "", false).GetAwaiter().GetResult());
            // Create Gamne
            GameInfo info;

            Assert.IsNotNull((info = client1.CreateGame("P1_Game").GetAwaiter().GetResult()));
            Assert.AreEqual("P1_Game", info.Name);
            // List games
            List <GameInfo> games;

            Assert.IsNotNull((games = client2.RequestGameList().GetAwaiter().GetResult()));
            Assert.AreEqual(1, games.Count);

            // ==================================================================
            // Join game
            // ==================================================================
            // Join is event based due to the long waiting time for confirmation
            var client1Task = new TaskCompletionSource <bool>();
            var client2Task = new TaskCompletionSource <bool>();

            // Register events
            client1.GameJoinRequested += (s, a) =>
            {
                Assert.AreEqual(info.UID, a.Message.UID);
                // Accept request
                Assert.IsTrue(client1.ConfirmJoin(info.UID, true));
                client1Task.TrySetResult(true);
            };
            client2.GameJoinRequested += (s, a) =>
            {
                Assert.AreEqual(info.UID, a.Message.UID);
                // Accept request
                Assert.IsTrue(client2.ConfirmJoin(info.UID, true));
                client2Task.TrySetResult(true);
            };

            Assert.IsTrue(client2.RequestJoinGame(games[0].UID));

            Assert.IsTrue(client2.IsConnected == true);
            Assert.IsTrue(client2.IsLoggedIn == true);

            // Abort after 3 seconds
            using (var ct = new CancellationTokenSource(3000))
            {
                ct.Token.Register(() =>
                {
                    client1Task.TrySetResult(false);
                    client2Task.TrySetResult(false);
                });
                Assert.IsTrue(client1Task.Task.GetAwaiter().GetResult());
                Assert.IsTrue(client2Task.Task.GetAwaiter().GetResult());

                Assert.IsTrue(client1.IsJoined == true);
                Assert.IsTrue(client2.IsJoined == true);
            }
        }