Esempio n. 1
0
        public override void Reset()
        {
            base.Reset();

            HallRoomId = 0;
            RoomPlayer = null;
        }
Esempio n. 2
0
 /// <summary>
 /// Room初始化
 /// </summary>
 /// <param name="players"></param>
 public void Init(Player[] players)
 {
     MaxWaitLoadingTime   = 90000;
     LoadingBroadcastTime = 1000;
     WaitRightTime        = 30000;
     TimeInit();
     for (int i = 0; i < players.Length; i++)
     {
         if (players[i] == null)
         {
             continue;
         }
         players[i].Room = this;
         MemberList.Add(players[i].Openid, players[i]);
         RoomPlayer roomPlayer = new RoomPlayer
         {
             Openid       = players[i].Openid,
             Nickname     = players[i].UserData.NickNeam,
             HeadImageUrl = players[i].UserData.NickWebPath,
             Right        = false
         };
         players[i].TempData.PlayerGameInfo = roomPlayer;
     }
     GoToConfirmStage();
 }
Esempio n. 3
0
        private JoinRoomResponseInfo JoinRoom(long hallRoomId, RoomPlayer roomPlayer)
        {
            var responseInfo = new JoinRoomResponseInfo();

            if (roomPlayer == null)
            {
                responseInfo.ErrCode = ErrorCode.JoinRoom_Message_Error;
            }
            else if (_room == null || _room.IsDiposed)
            {
                responseInfo.ErrCode = ErrorCode.JoinRoom_ServerRoom_Null;
            }
            else
            {
                int errCode    = 0;
                var playerInfo = _room.PlayerJoin(hallRoomId, roomPlayer, out errCode);
                if (playerInfo != null)
                {
                    responseInfo.Success = true;
                    responseInfo.Token   = playerInfo.Token;
                    responseInfo.ErrCode = ErrorCode.None;
                    _playerInfoManager.AddPlayerInfo(playerInfo.Token, playerInfo);

                    _logger.InfoFormat("Player({0}), Id:{1}, Name:{2}, ModelId:{3}, TeamId:{4}, Token:{5}", 0,
                                       roomPlayer.Id, roomPlayer.Name, roomPlayer.RoleModelId, roomPlayer.TeamId, playerInfo.Token);
                }
                else
                {
                    responseInfo.ErrCode = (ErrorCode)errCode;
                }
            }

            responseInfo.PlayerId = roomPlayer != null ? roomPlayer.Id : 0;
            return(responseInfo);
        }
Esempio n. 4
0
 public bool Remove(RoomPlayer p)
 {
     bool toReturn = false;
     if(players[0] == p) toReturn = true;
     players.Remove(p);
     return toReturn;
 }
Esempio n. 5
0
 protected Room(RoomId roomId, RoomCode roomCode, RoomPlayer host)
 {
     RoomId   = roomId;
     RoomCode = roomCode;
     Host     = host;
     Status   = RoomStatus.Waiting;
 }
Esempio n. 6
0
        /// <summary>
        /// 广播加载进度
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SendLoading(object sender, ElapsedEventArgs e)//广播进度并判断
        {
            bool          Temp  = true;
            ProtocolBytes bytes = new ProtocolBytes();

            bytes.SetProtocol(Fursion_Protocol.Loading);
            RoomInitInfo roomplayerInfo = new RoomInitInfo();

            foreach (Player player in MemberList.Values)
            {
                RoomPlayer roomPlayer = player.TempData.PlayerGameInfo;
                roomplayerInfo.RoomPlayers.Add(roomPlayer);
            }
            bytes.AddData(JsonConvert.SerializeObject(roomplayerInfo));
            foreach (Player player in MemberList.Values)
            {
                if (player != null && player.UDPClient != null)
                {
                    UDP.instance.SocketSend(bytes, player.UDPClient);
                }
            }
            foreach (Player player in MemberList.Values)
            {
                Temp &= player.TempData.PlayerGameInfo.LoadingProgressBool;
            }
            if (Temp)
            {
                ToStart();
            }
        }
        // Updates a player's socket connection. The player should be in a room.
        // If the player already has an open connection, it is closed and the new one takes place.
        public async Task <ICollection <RoomPlayer> > UpdatePlayerConnection(string roomId, string playerId, WebSocket conn)
        {
            Room       oldR;
            RoomPlayer player = base.GetPlayerInRoom(roomId, playerId, out oldR);
            ICollection <RoomPlayer> beforeUpdate = oldR.Players.PlayerList;
            List <RoomPlayer>        list         = new List <RoomPlayer>();

            foreach (RoomPlayer p in beforeUpdate)
            {
                list.Add(p);
            }
            Room      newR = oldR;
            WebSocket oldS = player.socket;

            player.socket = conn;
            newR.Players.UpdatePlayer(player);

            if (base._rooms.TryUpdate(roomId, newR, oldR))
            {
                Console.WriteLine($"\n[GameRoomManager] updated player connection: {playerId}, for room: {roomId}");
                await CloseSocketConn(oldS);

                return(list);
            }
            else
            {
                Console.WriteLine($"\n[RoomManager] Player '{playerId}' already removed from room '{roomId}'!");
                return(null);
            }
        }
Esempio n. 8
0
        public void HandleRoomJoinPacket(Client client, Packet packet)
        {
            C2SRoomJoinPacket roomJoinPacket = new C2SRoomJoinPacket(packet);
            Room room = this.GameHandler.Rooms.Find(r => r.Id == roomJoinPacket.RoomId);

            S2CRoomJoinAnswer roomJoinAnswer = new S2CRoomJoinAnswer(0, 0, 0, 0);

            client.PacketStream.Write(roomJoinAnswer);
            client.ActiveRoom = room;

            S2CRoomInformation roomInformationPacket = new S2CRoomInformation(room);

            client.PacketStream.Write(roomInformationPacket);

            RoomPlayer roomPlayer = new RoomPlayer();

            roomPlayer.Character = client.ActiveCharacter;
            roomPlayer.Position  = 1;
            roomPlayer.Master    = false;
            room.CurrentPlayers.Add(roomPlayer);

            List <Client> clientsInRoom = this.GameHandler.GetClientsInRoom(room.Id);

            foreach (Client roomClient in clientsInRoom)
            {
                S2CRoomPlayerInformation roomPlayerInformationPacket =
                    new S2CRoomPlayerInformation(room.CurrentPlayers);
                roomClient.PacketStream.Write(roomPlayerInformationPacket);
            }
        }
Esempio n. 9
0
        /// <summary>
        /// 获得房间信息
        /// </summary>
        /// <returns></returns>
        public GameMessage GetRoomInfo()
        {
            GameMessage message = new GameMessage();

            message.type = BitConverter.GetBytes((int)Protocol.GetRoomInfo);
            List <RoomPlayer> roomPlayers = new List <RoomPlayer>();

            //每个玩家的信息
            foreach (Player p in playerDic.Values)
            {
                RoomPlayer roomPlayer = new RoomPlayer();
                PlayerInfo playerinfo = new PlayerInfo();
                playerinfo.id         = p.id;
                playerinfo.win        = p.data.win;
                playerinfo.defeat     = p.data.defeat;
                roomPlayer.playerinfo = playerinfo;

                roomPlayer.team = p.tempData.team;
                int isOwner = p.tempData.isOwner ? 1 : 0;
                roomPlayer.isOwner = isOwner;

                roomPlayers.Add(roomPlayer);
            }

            message.data = ProtoTransfer.Serialize <List <RoomPlayer> >(roomPlayers);

            return(message);
        }
        // Adds a player to an existing room
        public ICollection <string> AddPlayerToRoom(string roomId, RoomPlayer player)
        {
            Room oldR = GetRoomById(roomId);

            if (oldR.Players.ContainsPlayer(player.playerId))
            {
                throw new AlreadyInLobbyException($"'{player.playerId}' is already in a room.");
            }
            Room newR = oldR;

            if (newR.Players.AddPlayer(player))
            {
                _rooms.TryUpdate(roomId, newR, oldR);
                Console.WriteLine($"\n[RoomManager] player '{player.playerId}' added to room '{roomId}'.");
                ICollection <RoomPlayer> playersInRoom = oldR.Players.PlayerList;
                List <string>            list          = new List <string>();
                foreach (RoomPlayer p in playersInRoom)
                {
                    list.Add(p.playerId);
                }
                return(list);
            }
            else
            {
                throw new FullRoomException("Maximum 2/4 players allowed in a room, for matchmaking and custom game respectively!");
            }
        }
Esempio n. 11
0
    public void ChangeLeader(string playerID)
    {
        // 1. 기존 방장 리셋
        // 2. 새로운 방장 임명

        for (int i = 0; i < roomPlayers.Count; i++)
        {
            if (roomPlayers[i].isLeader)
            {
                roomPlayers[i].isLeader = false;
                break;
            }
        }

        for (int i = 0; i < roomPlayers.Count; i++)
        {
            if (roomPlayers[i].player.PlayerID == playerID)
            {
                if (roomPlayers[i].player.IsMine())
                {
                    RoomGUI.Instance.ChangeReadyToStartButton();
                }

                roomPlayers[i].isLeader = true;
                this.leader             = roomPlayers[i];
                SetReady(roomPlayers[i].player.PlayerID, false);
            }
        }
        RoomGUI.Instance.UpdateRoomPlayerUIElement(this);
    }
Esempio n. 12
0
    private void AddTankInstance(NetworkConnection conn, bool isGameOngoing)
    {
        RoomPlayer roomPlayer = conn.identity.gameObject.GetComponent <RoomPlayer>();

        m_Clients.Add(conn, roomPlayer);

        if (roomPlayer.gameObject != null && roomPlayer != null)
        {
            Transform  startPos = GetStartPosition();
            GameObject player   = startPos != null
                ? Instantiate(playerPrefab, startPos.position, startPos.rotation)
                : Instantiate(playerPrefab);

            TankManager tankManager = roomPlayer.m_Tank;
            tankManager.m_Instance = player;

            NetworkServer.ReplacePlayerForConnection(conn, tankManager.m_Instance, true);

            tankManager.m_SpawnPoint = startPos;

            roomPlayer.DisableRoomSettings();

            m_Tanks.Add(tankManager);

            if (isGameOngoing)
            {
                m_GameManager.AddPlayer(tankManager, conn);
            }
        }
    }
 public override void OnReceive(object session, Stream stream)
 {
     this.Result       = (JoinRoomResult)stream.ReadInt();
     this.Room         = stream.ReadObject <GameRoom>();
     this.SelfPlayer   = stream.ReadObject <RoomPlayer>();
     this.OtherPlayers = stream.ReadObject <List <object> >();
 }
Esempio n. 14
0
        /// Randomizes faction attribution for all players inside a room.
        private void AssignDefaultPlayerFactions()
        {
            Random     rng   = new Random();
            List <int> order = new List <int>();

            for (int ix = 0; ix < 4; ix++)
            {
                order.Add(ix);
            }
            int nx = 4;

            while (nx > 1)
            {
                nx--;
                int k     = rng.Next(nx + 1);
                int value = order[k];
                order[k]  = order[nx];
                order[nx] = value;
            }

            List <Faction> factions = (List <Faction>)MapReader.readFactions();

            int         i          = 0;
            IEnumerator roomPlayer = this.Players.PlayerList.GetEnumerator();

            while (roomPlayer.MoveNext())
            {
                Console.WriteLine(i);
                RoomPlayer rp = (RoomPlayer)roomPlayer.Current;
                rp.faction = factions[order[i]].name;
                RoomPlayer newCopy = (RoomPlayer)roomPlayer.Current;
                Console.WriteLine(newCopy.playerId + "; " + newCopy.faction);
                i++;
            }
        }
Esempio n. 15
0
        public void removeDefeatedPlayers(GameRoom room)
        {
            IEnumerator roomPlayer = room.Players.PlayerList.GetEnumerator();

            while (roomPlayer.MoveNext())
            {
                RoomPlayer rp = (RoomPlayer)roomPlayer.Current;
                Console.WriteLine(1 + ";" + rp.faction);
                bool playerDataExists = false;
                foreach (PlayerMatchdata data in room.getMatchdata())
                {
                    if (data.playerId.Equals(rp.playerId))
                    {
                        playerDataExists = true;
                    }
                }
                if (!isFactionActive(rp, room) && !playerDataExists)
                {
                    Console.WriteLine(2 + ";" + rp.faction);
                    int placement = 4 - room.insertDefeatedPlayer(rp);
                    //removePlayerFromRoom(rp, room);
                    rp.placement = placement;
                    PlayerMatchdata matchdata = new PlayerMatchdata(room.roomId, rp.playerId, rp.placement, rp.armiesCreated, rp.regionsConquered);
                    room.insertPlayerData(matchdata);
                    Console.WriteLine("Player to matchdata: " + matchdata.playerId);
                }
            }
        }
Esempio n. 16
0
    public override void OnServerDisconnect(NetworkConnection conn)
    {
        GameObject disconnectedPlayer = conn.identity.gameObject;

        if (IsSceneActive(onlineScene))
        {
            NetworkServer.Destroy(disconnectedPlayer);
            RoomPlayer.UpdatePlayerIndexDueDisc();
        }
        else
        {
            NetworkServer.Destroy(m_Clients[conn].gameObject);
            m_GameManager.RemovePlayer(disconnectedPlayer);

            for (int i = 0; i < m_Tanks.Count; i++)
            {
                if (m_Tanks[i].m_Instance == disconnectedPlayer)
                {
                    m_Tanks.RemoveAt(i);
                }
            }
            NetworkServer.Destroy(disconnectedPlayer);
        }

        if (m_Tanks.Count < 1)
        {
            // Forces the server to shutdown.
            Shutdown();

            // Reset internal state of the server and start the server again.
            Start();
        }
    }
Esempio n. 17
0
        // Objects are despawned when a runner is shutdown <<-- 왜 안되지
        public void OnShutdown(NetworkRunner runner, ShutdownReason shutdownReason)
        {
            Util.Log($"OnShutDown {shutdownReason}");
            SetConnectionStatus(Enum.ConnectionStatus.Disconnected);

            (string status, string msg) = ShutdownReasonToHuman(shutdownReason);
            //TODO : UI에 뿌려줄거라면! status와 msg 이용하면 됨.

            for (int i = RoomPlayer.Players.Count - 1; i >= 0; i--)
            {
                RoomPlayer player = RoomPlayer.Players[i];
                StartCoroutine(player.Co_RemovePlayer());
            }
            for (int i = PlayerModel.Players.Count - 1; i >= 0; i--)
            {
                PlayerModel player = PlayerModel.Players[i];
                if (!player || !player.Object || player.Object.InputAuthority)
                {
                    continue;
                }
                StartCoroutine(player.Co_RemovePlayer());
            }

            if (_runner)
            {
                Destroy(_runner.gameObject);
            }

            _pool.ClearPools();

            _runner = null;
        }
Esempio n. 18
0
    public void addPlayer(int connectionId, GameObject player)
    {
        RoomPlayer rp = player.GetComponent <RoomPlayer>();

        players.Add(rp);
        rp.color = ResourceContainer.Instance.playerColors[players.Count - 1].color;
    }
Esempio n. 19
0
    public void RESPONSE_CREATE_ROOM(TcpPacket packet)
    {
        if (packet.header.extra == (int)EXTRA.SUCCESS)
        {
            SERVERtoCLIENT_CreateRoomPacketData recvData = new SERVERtoCLIENT_CreateRoomPacketData();
            recvData.Deserialize(packet);

            //LobbyManager.Instance.Release();
            LobbySceneGUI.Instance.ChangeLobbyToRoom();

            RoomPlayer roomPlayer = RoomManager.Instance.CreateRoomPlayer(GameFramework.Instance.MyPlayer);
            roomPlayer.isLeader = true;

            Room room = RoomManager.Instance.CreateRoom(recvData.roomName, recvData.roomKey, 1);
            room.PushRoomPlayer(new RoomPlayer[] { roomPlayer });
            room.Enter();

            RoomGUI.Instance.Initialize(room);
            RoomGUI.Instance.ChangeReadyToStartButton();
        }
        else if (packet.header.extra == (int)EXTRA.FAIL)
        {
            Debug.Log("OVERLAPED ROOM NAME...");

            MessageBox messageBox = UIFactory.Instance.Create(UI_ELEMENT.MESSAGE_BOX).GetComponent <MessageBox>();
            messageBox.Initialize();
            messageBox.AttachUIElement(new Vector2(0, 50), LobbySceneGUI.Instance.lobbyGUI);
            messageBox.SetTitle("중복된 방 이름입니다.");
        }
    }
Esempio n. 20
0
        public void Test()
        {
            var apc = Apc.Allocate();

            apc.FunctionName = RpcMessageType.RequestCreateRoom;

            var msg = RequestCreateRoomMessage.Allocate();

            msg.HallRoomId = 1;
            msg.MapId      = 33;
            var player = RoomPlayer.Allocate();

            player.Id = 4;
            msg.Players.Add(player);
            {
                MemoryStream stream = new MemoryStream();
                if (msg != null)
                {
                    _serializer.Serialize(stream, msg);
                }
                ByteString byteString = ByteString.CopyFrom(stream.ToArray());
                apc.Parameters.Add(byteString);
            }
            NetworkChannelOnMessageReceived(null, 0, apc);
            msg.ReleaseReference();
        }
Esempio n. 21
0
    void Awake()
    {
        m_NicknameInput = GetComponentInChildren <InputField>();
        m_NicknameInput.onValueChanged.AddListener(delegate { UpdateNickname(); });
        m_NicknameInput.onEndEdit.AddListener(delegate { SetNickname(); });

        m_RoomPlayer = GetComponentInParent <RoomPlayer>();
    }
Esempio n. 22
0
 public void onClick()
 {
     if (player == null)
     {
         player = NetworkClient.connection.identity.GetComponent <RoomPlayer>();
     }
     player.CmdChangeReadyState(!player.readyToBegin);
 }
Esempio n. 23
0
        public override async Task <string> OnConnectedHostLobby(RoomPlayer player, bool findMatch)
        {
            string new_room_id = await base.OnConnectedHostLobby(player, findMatch);

            await base.SendMessageAsync(player.socket, JsonConvert.SerializeObject(
                                            new LobbyAlertResponse("new-room-id", new_room_id)));

            return(new_room_id);
        }
Esempio n. 24
0
    public RoomPlayer CreateRoomPlayer(Player player)
    {
        RoomPlayer roomPlayer = new RoomPlayer();

        roomPlayer.player     = player;
        roomPlayer.readyState = false;

        return(roomPlayer);
    }
Esempio n. 25
0
    //static List<Color> unusedColors = new List<Color>();


    public void Initialize(RoomPlayer newPlayer)
    {
        readyButton.onClick.AddListener(newPlayer.ToggleReadyStatus);
        //playerNameInput.onEndEdit.AddListener(newPlayer.ChangePlayerName);
        colorDropDown.onValueChanged.AddListener(newPlayer.ChangeColor);

        SetPlayerName(newPlayer.PhotonPlayer.NickName);
        SetReadyStatus(false);
        SetColor(0);
    }
Esempio n. 26
0
 public void DestroyAllRoomPlayers()
 {
     foreach (RoomPlayer roomPlayer in m_RoomPlayers)
     {
         if (roomPlayer != null)
         {
             NetworkServer.Destroy(roomPlayer.gameObject);
         }
         RoomPlayer.ResetPlayerIndexDueDisc();
     }
 }
Esempio n. 27
0
    private void CreatePlayer()
    {
        roomPlayerList.Clear();

        for (int i = 0; i < 2; ++i)
        {
            Camp       camp       = (Camp)(1 << i);
            RoomPlayer roomPlayer = new RoomPlayer(camp);
            roomPlayerList.Add(roomPlayer);
        }
    }
Esempio n. 28
0
    public void Leave()
    {
        roomName          = "";
        roomKey           = "";
        joinedPlayerCount = 0;
        roomPlayers.Clear();
        leader      = null;
        isStartGame = false;

        RoomGUI.Instance.Release();
    }
Esempio n. 29
0
 public void AddGuest(PlayerId playerId, string userName, CharacterKey characterKey)
 {
     if (Guest != null)
     {
         AddDomainEvent(new AddGuestFailedEvent(RoomId, playerId, userName, characterKey));
     }
     else
     {
         Guest = new RoomPlayer(playerId, userName, characterKey, 0);
         AddDomainEvent(new GuestJoinedRoomEvent(RoomId, playerId, userName, characterKey));
     }
 }
Esempio n. 30
0
    public void StocMessage_HsPlayerEnter(BinaryReader r)
    {
        string     name   = r.ReadUnicode(20);
        int        pos    = r.ReadByte() & 3;//F**k this
        RoomPlayer player = new RoomPlayer();

        player.name      = name;
        player.prep      = false;
        roomPlayers[pos] = player;
        realize();
        UIHelper.Flash();
    }
Esempio n. 31
0
    public override GameObject OnRoomServerCreateGamePlayer(NetworkConnection connection, GameObject roomPlayerObj)
    {
        RoomPlayer roomPlayer = roomPlayerObj.GetComponent <RoomPlayer>();

        GameObject gameObject = Instantiate(playerPrefab);

        PlayerController player = gameObject.GetComponent <PlayerController>();

        player.ServerSetupPlayer(roomPlayer.GetMatchSettings());

        return(gameObject);
    }
Esempio n. 32
0
 public void AddPlayer(RoomPlayer roomPlayer)
 {
     players.Add(roomPlayer);
 }