예제 #1
0
        public LobbyHandler(string ipPort, string appName, string lobbyName)
        {
            this.ipPort    = ipPort;
            this.appName   = appName;
            this.lobbyName = lobbyName;

            this.peer = new LiteLobbyPeer(this, false);
            this.peer.Connect(this.ipPort, this.appName);
        }
예제 #2
0
        public void JoinAndJoin()
        {
            var peerOne = new DummyPeer {
                SessionId = "#1"
            };
            var peerTwo = new DummyPeer {
                SessionId = "#2"
            };
            var peerLobby = new DummyPeer {
                SessionId = "#L"
            };
            var litePeerOne   = new LiteLobbyPeer(peerOne.Protocol, peerOne);
            var litePeerTwo   = new LiteLobbyPeer(peerTwo.Protocol, peerTwo);
            var litePeerLobby = new LiteLobbyPeer(peerLobby.Protocol, peerLobby);

            try
            {
                // peer lobby: join
                OperationRequest request = GetJoinLobbyRequest();
                PeerHelper.InvokeOnOperationRequest(litePeerLobby, request, new SendParameters());
                Assert.IsTrue(peerLobby.WaitForNextResponse(WaitTimeout));
                List <OperationResponse> responseList = peerLobby.GetResponseList();
                Assert.AreEqual(1, responseList.Count);

                // peer lobby: receive lobby games
                Assert.IsTrue(peerLobby.WaitForNextEvent(WaitTimeout));
                List <EventData> eventList = peerLobby.GetEventList();
                Assert.AreEqual(1, eventList.Count);
                EventData eventData = eventList[0];
                Assert.AreEqual((byte)LiteLobbyEventCode.GameList, eventData.Code);

                // peer 1: join
                request = GetJoinRequest();
                PeerHelper.InvokeOnOperationRequest(litePeerOne, request, new SendParameters());
                Assert.IsTrue(peerOne.WaitForNextResponse(WaitTimeout));

                responseList = peerOne.GetResponseList();
                Assert.AreEqual(1, responseList.Count);
                OperationResponse response = responseList[0];
                Assert.AreEqual(1, response.Parameters[(byte)ParameterKey.ActorNr]);

                // peer 1: receive own join event
                Assert.IsTrue(peerOne.WaitForNextEvent(WaitTimeout));
                eventList = peerOne.GetEventList();
                Assert.AreEqual(1, eventList.Count);
                eventData = eventList[0];
                Assert.AreEqual(LiteOpCode.Join, eventData.Code);
                Assert.AreEqual(1, eventData.Parameters[(byte)ParameterKey.ActorNr]);

                // peer lobby: wait for lobby update (all 2 sec)
                Assert.IsTrue(peerLobby.WaitForNextEvent(2000 + WaitTimeout));
                eventList = peerLobby.GetEventList();
                Assert.AreEqual(1, eventList.Count);
                eventData = eventList[0];
                var games = (Hashtable)eventData.Parameters[(byte)ParameterKey.Data];
                Assert.AreEqual(1, games.Count);
                Assert.AreEqual("1", games["testGame"]);

                // peer 2: join
                request = GetJoinRequest();
                PeerHelper.InvokeOnOperationRequest(litePeerTwo, request, new SendParameters());
                Assert.IsTrue(peerTwo.WaitForNextResponse(WaitTimeout));

                responseList = peerTwo.GetResponseList();
                Assert.AreEqual(1, responseList.Count);
                response = responseList[0];
                Assert.AreEqual(2, response.Parameters[(byte)ParameterKey.ActorNr]);

                // peer 2: receive own join event
                Assert.IsTrue(peerTwo.WaitForNextEvent(WaitTimeout));
                eventList = peerTwo.GetEventList();
                Assert.AreEqual(1, eventList.Count);
                eventData = eventList[0];
                Assert.AreEqual(LiteOpCode.Join, eventData.Code);
                Assert.AreEqual(2, eventData.Parameters[(byte)ParameterKey.ActorNr]);

                // peer 1: receive join event of peer 2
                Assert.IsTrue(peerOne.WaitForNextEvent(WaitTimeout));
                eventList = peerOne.GetEventList();
                Assert.AreEqual(1, eventList.Count);
                eventData = eventList[0];
                Assert.AreEqual(LiteOpCode.Join, eventData.Code);
                Assert.AreEqual(2, eventData.Parameters[(byte)ParameterKey.ActorNr]);

                // peer lobby: wait for lobby update (all 2 sec)
                Assert.IsTrue(peerLobby.WaitForNextEvent(2000 + WaitTimeout));
                eventList = peerLobby.GetEventList();
                Assert.AreEqual(1, eventList.Count);
                eventData = eventList[0];
                games     = (Hashtable)eventData.Parameters[(byte)ParameterKey.Data];
                Assert.AreEqual(1, games.Count);
                Assert.AreEqual("2", games["testGame"]);

                // peer 2: join again
                request = GetJoinRequest();
                PeerHelper.InvokeOnOperationRequest(litePeerTwo, request, new SendParameters());
                Assert.IsTrue(peerTwo.WaitForNextResponse(WaitTimeout));
                responseList = peerTwo.GetResponseList();
                Assert.AreEqual(1, responseList.Count);

                // peer 2: do not receive own leave event, receive own join event
                Assert.IsTrue(peerTwo.WaitForNextEvent(WaitTimeout));
                eventList = peerTwo.GetEventList();
                Assert.AreEqual(1, eventList.Count);
                eventData = eventList[0];
                Assert.AreEqual(LiteOpCode.Join, eventData.Code);
                Assert.AreEqual(3, eventData.Parameters[(byte)ParameterKey.ActorNr]);

                // peer 1: receive leave and event of peer 2
                Assert.IsTrue(peerOne.WaitForNextEvent(WaitTimeout));
                eventList = peerOne.GetEventList();
                Assert.GreaterOrEqual(eventList.Count, 1);
                eventData = eventList[0];
                Assert.AreEqual(LiteOpCode.Leave, eventData.Code);
                Assert.AreEqual(2, eventData.Parameters[(byte)ParameterKey.ActorNr]);

                if (eventList.Count == 1)
                {
                    // waiting for join event
                    Assert.IsTrue(peerOne.WaitForNextEvent(WaitTimeout));
                    eventList = peerOne.GetEventList();
                    Assert.AreEqual(1, eventList.Count);
                    eventData = eventList[0];
                }
                else
                {
                    eventData = eventList[1];
                }

                Assert.AreEqual(LiteOpCode.Join, eventData.Code);
                Assert.AreEqual(3, eventData.Parameters[(byte)ParameterKey.ActorNr]);

                // peer lobby: wait for lobby update (all 2 sec)
                Assert.IsTrue(peerLobby.WaitForNextEvent(2000 + WaitTimeout));
                eventList = peerLobby.GetEventList();
                Assert.AreEqual(1, eventList.Count);
                eventData = eventList[0];
                games     = (Hashtable)eventData.Parameters[(byte)ParameterKey.Data];
                Assert.AreEqual(1, games.Count);
                Assert.AreEqual("2", games["testGame"]);
            }
            finally
            {
                PeerHelper.SimulateDisconnect(litePeerOne);
                PeerHelper.SimulateDisconnect(litePeerTwo);
                PeerHelper.SimulateDisconnect(litePeerLobby);
            }
        }
예제 #3
0
        public void JoinAndJoin()
        {
            var peerOne = new DummyPeer { SessionId = "#1" };
            var peerTwo = new DummyPeer { SessionId = "#2" };
            var peerLobby = new DummyPeer { SessionId = "#L" };
            var litePeerOne = new LiteLobbyPeer(peerOne.Protocol, peerOne);
            var litePeerTwo = new LiteLobbyPeer(peerTwo.Protocol, peerTwo);
            var litePeerLobby = new LiteLobbyPeer(peerLobby.Protocol, peerLobby);

            try
            {
                // peer lobby: join
                OperationRequest request = GetJoinLobbyRequest();
                PeerHelper.InvokeOnOperationRequest(litePeerLobby, request, new SendParameters());
                Assert.IsTrue(peerLobby.WaitForNextResponse(WaitTimeout));
                List<OperationResponse> responseList = peerLobby.GetResponseList();
                Assert.AreEqual(1, responseList.Count);

                // peer lobby: receive lobby games
                Assert.IsTrue(peerLobby.WaitForNextEvent(WaitTimeout));
                List<EventData> eventList = peerLobby.GetEventList();
                Assert.AreEqual(1, eventList.Count);
                EventData eventData = eventList[0];
                Assert.AreEqual((byte)LiteLobbyEventCode.GameList, eventData.Code);

                // peer 1: join
                request = GetJoinRequest();
                PeerHelper.InvokeOnOperationRequest(litePeerOne, request, new SendParameters());
                Assert.IsTrue(peerOne.WaitForNextResponse(WaitTimeout));

                responseList = peerOne.GetResponseList();
                Assert.AreEqual(1, responseList.Count);
                OperationResponse response = responseList[0];
                Assert.AreEqual(1, response.Parameters[(byte)ParameterKey.ActorNr]);

                // peer 1: receive own join event
                Assert.IsTrue(peerOne.WaitForNextEvent(WaitTimeout));
                eventList = peerOne.GetEventList();
                Assert.AreEqual(1, eventList.Count);
                eventData = eventList[0];
                Assert.AreEqual(LiteOpCode.Join, eventData.Code);
                Assert.AreEqual(1, eventData.Parameters[(byte)ParameterKey.ActorNr]);

                // peer lobby: wait for lobby update (all 2 sec)
                Assert.IsTrue(peerLobby.WaitForNextEvent(2000 + WaitTimeout));
                eventList = peerLobby.GetEventList();
                Assert.AreEqual(1, eventList.Count);
                eventData = eventList[0];
                var games = (Hashtable)eventData.Parameters[(byte)ParameterKey.Data];
                Assert.AreEqual(1, games.Count);
                Assert.AreEqual("1", games["testGame"]);

                // peer 2: join
                request = GetJoinRequest();
                PeerHelper.InvokeOnOperationRequest(litePeerTwo, request, new SendParameters());
                Assert.IsTrue(peerTwo.WaitForNextResponse(WaitTimeout));

                responseList = peerTwo.GetResponseList();
                Assert.AreEqual(1, responseList.Count);
                response = responseList[0];
                Assert.AreEqual(2, response.Parameters[(byte)ParameterKey.ActorNr]);

                // peer 2: receive own join event
                Assert.IsTrue(peerTwo.WaitForNextEvent(WaitTimeout));
                eventList = peerTwo.GetEventList();
                Assert.AreEqual(1, eventList.Count);
                eventData = eventList[0];
                Assert.AreEqual(LiteOpCode.Join, eventData.Code);
                Assert.AreEqual(2, eventData.Parameters[(byte)ParameterKey.ActorNr]);

                // peer 1: receive join event of peer 2
                Assert.IsTrue(peerOne.WaitForNextEvent(WaitTimeout));
                eventList = peerOne.GetEventList();
                Assert.AreEqual(1, eventList.Count);
                eventData = eventList[0];
                Assert.AreEqual(LiteOpCode.Join, eventData.Code);
                Assert.AreEqual(2, eventData.Parameters[(byte)ParameterKey.ActorNr]);

                // peer lobby: wait for lobby update (all 2 sec)
                Assert.IsTrue(peerLobby.WaitForNextEvent(2000 + WaitTimeout));
                eventList = peerLobby.GetEventList();
                Assert.AreEqual(1, eventList.Count);
                eventData = eventList[0];
                games = (Hashtable)eventData.Parameters[(byte)ParameterKey.Data];
                Assert.AreEqual(1, games.Count);
                Assert.AreEqual("2", games["testGame"]);

                // peer 2: join again
                request = GetJoinRequest();
                PeerHelper.InvokeOnOperationRequest(litePeerTwo, request, new SendParameters());
                Assert.IsTrue(peerTwo.WaitForNextResponse(WaitTimeout));
                responseList = peerTwo.GetResponseList();
                Assert.AreEqual(1, responseList.Count);

                // peer 2: do not receive own leave event, receive own join event
                Assert.IsTrue(peerTwo.WaitForNextEvent(WaitTimeout));
                eventList = peerTwo.GetEventList();
                Assert.AreEqual(1, eventList.Count);
                eventData = eventList[0];
                Assert.AreEqual(LiteOpCode.Join, eventData.Code);
                Assert.AreEqual(3, eventData.Parameters[(byte)ParameterKey.ActorNr]);

                // peer 1: receive leave and event of peer 2
                Assert.IsTrue(peerOne.WaitForNextEvent(WaitTimeout));
                eventList = peerOne.GetEventList();
                Assert.GreaterOrEqual(eventList.Count, 1);
                eventData = eventList[0];
                Assert.AreEqual(LiteOpCode.Leave, eventData.Code);
                Assert.AreEqual(2, eventData.Parameters[(byte)ParameterKey.ActorNr]);

                if (eventList.Count == 1)
                {
                    // waiting for join event
                    Assert.IsTrue(peerOne.WaitForNextEvent(WaitTimeout));
                    eventList = peerOne.GetEventList();
                    Assert.AreEqual(1, eventList.Count);
                    eventData = eventList[0];
                }
                else
                {
                    eventData = eventList[1];
                }

                Assert.AreEqual(LiteOpCode.Join, eventData.Code);
                Assert.AreEqual(3, eventData.Parameters[(byte)ParameterKey.ActorNr]);

                // peer lobby: wait for lobby update (all 2 sec)
                Assert.IsTrue(peerLobby.WaitForNextEvent(2000 + WaitTimeout));
                eventList = peerLobby.GetEventList();
                Assert.AreEqual(1, eventList.Count);
                eventData = eventList[0];
                games = (Hashtable)eventData.Parameters[(byte)ParameterKey.Data];
                Assert.AreEqual(1, games.Count);
                Assert.AreEqual("2", games["testGame"]);
            }
            finally
            {
                PeerHelper.SimulateDisconnect(litePeerOne);
                PeerHelper.SimulateDisconnect(litePeerTwo);
                PeerHelper.SimulateDisconnect(litePeerLobby);
            }
        }
예제 #4
0
 /// <summary>
 /// Called by Unity on start. We create and connect a new LiteLobbyPeer.
 /// This makes the PhotonClient relatively autonomous.
 /// </summary>
 public virtual void Start()
 {
     this.Peer = new LiteLobbyPeer(this);
     this.Connect();
 }