예제 #1
0
        public override void OnEvent(EventData photonEvent)
        {
            switch (photonEvent.Code)
            {
            case EventCode.AppStats:

                break;

            case EventCode.LobbyStats:
                this.RoomInfoList.Keys.ToList().ForEach(roomName =>
                {
                    var roomProp    = this.RoomInfoList[roomName] as RoomInfo;
                    var playerCount = roomProp.PlayerCount;
                    var maxPlayers  = roomProp.MaxPlayers;
                    var isOpen      = roomProp.IsOpen;

                    if (isOpen && playerCount < maxPlayers)
                    {
                        RoomShared roomShared = new RoomShared();
                        for (int i = playerCount, clientId = 0; i < maxPlayers; ++i, ++clientId)
                        {
                            RobotClient client = new RobotClient(true, clientId, roomShared);
                            client.OpJoinRoom(roomName);
                        }
                    }
                });
                break;

            case EventCode.GameListUpdate:
                // todo: Enter a room automatically.
                if (photonEvent.Parameters[ParameterCode.GameList] is Hashtable)
                {
                    var hashtable = photonEvent.Parameters[ParameterCode.GameList] as Hashtable;

                    this.RoomInfoList.Keys.ToList().ForEach(roomName =>
                    {
                        var roomNames = hashtable.Keys.OfType <string>();
                        if (roomNames.Count() > 0 && roomNames.Contains(roomName))
                        {
                            var roomProp    = hashtable[roomName] as Hashtable;
                            var playerCount = Convert.ToInt32(roomProp[GamePropertyKey.PlayerCount]);
                            var maxPlayers  = Convert.ToInt32(roomProp[GamePropertyKey.MaxPlayers]);
                            var isOpen      = Convert.ToBoolean(roomProp[GamePropertyKey.IsOpen]);

                            if (isOpen && playerCount < maxPlayers)
                            {
                                RoomShared roomShared = new RoomShared();
                                for (int i = playerCount, clientId = 0; i < maxPlayers; ++i, ++clientId)
                                {
                                    RobotClient client = new RobotClient(true, clientId, roomShared);

                                    client.OnStateChangeAction += (ClientState obj) =>
                                    {
                                        if (obj == ClientState.JoinedLobby)
                                        {
                                            client.OpJoinRoom(roomName);
                                        }
                                    };
                                }
                            }
                        }
                    });
                }

                break;
            }
            base.OnEvent(photonEvent);
        }