public void PacketReceived(Server.ClientInstance client, IPacket packet)
        {
            Console.WriteLine(packet.ToString());
            ServerPlayer player = GetPlayer(client);

            switch (packet.GetType().Name)
            {
            case "Connect":
                Connect cn = (Connect)packet;
                if (cn.Version != Server.Version)
                {
                    player.Disconnect(
                        $"Your version {cn.Version} is different than the server's version. {Server.Version}");
                    return;
                }
                var slot = GetNewPlayerSlot();
                if (slot == -1)
                {
                    player.Disconnect("Too many people are online.");
                    return;
                }
                cn.PlayerId = player.PlayerSlot = (ushort)slot;
                player.SendPacket(cn);    //kirby right back at ya
                break;

            case "Disconnect":
                Disconnect dc = (Disconnect)packet;
                Console.WriteLine(dc.Reason);
                //player.client.client.Close();
                Broadcast(new PlayerConnect {
                    PlayerId = player.PlayerSlot, Quitting = true, Reason = dc.Reason
                }, false, player);
                break;

            case "Movement":
                Movement mv = (Movement)packet;
                player.Position = mv.Pos;
                mv.PlayerId     = player.PlayerSlot;
                Broadcast(mv, false, player);
                break;

            case "PlayerConnect":
                PlayerConnect pcn = (PlayerConnect)packet;
                if (!pcn.Quitting)
                {
                    player.PlayerName  = pcn.Name;
                    player.Position    = pcn.Pos;
                    player.CurrentRoom = pcn.RoomNumber;
                }
                Broadcast(pcn, false, player);
                break;
            }
        }
Exemple #2
0
        public Player PlayerJoined()
        {
            var resp = connection.WaitMessage(); // Ожидаем сообщения

            switch (resp.Type)
            {
            case TypeCommand.JoinGame:
            {
                PlayerConnect?.Invoke();
                return(Player.ToObject(resp[0]));
            }

            default: throw new Exception(":)");
            }
        }
Exemple #3
0
 void Start()
 {
     //Send RPC from current players to other players to reflect name change
     if (photonView.isMine)
     {
         //Get a photon manager reference. This occurs only once per game
         photonManager = GameObject.Find("PhotonNetworkManager");
         if (photonManager)
         {
             PlayerConnect playerConnect = photonManager.GetComponent <PlayerConnect>();
             playerNameText.text = playerConnect.playerName;
             //Send buffered RPC to reflect name change for the other players as well as the ones who join later
             photonView.RPC("ChangePlayerNameRPC", PhotonTargets.OthersBuffered, playerConnect.playerName);
         }
     }
 }
Exemple #4
0
        /// <summary>
        /// Callback method for when a player connects to the server.
        /// </summary>
        /// <param name="playerConnect">The PlayerConnect packet data.</param>
        private void OnPlayerConnect(PlayerConnect playerConnect)
        {
            Logger.Get().Info(this, $"Received PlayerConnect data for ID: {playerConnect.Id}");

            var playerData = new ClientPlayerData(playerConnect.Id, playerConnect.Username);

            _playerData[playerConnect.Id] = playerData;

            UiManager.InternalChatBox.AddMessage($"Player '{playerConnect.Username}' connected to the server");

            try {
                PlayerConnectEvent?.Invoke(playerData);
            } catch (Exception e) {
                Logger.Get().Warn(this,
                                  $"Exception thrown while invoking PlayerConnect event, {e.GetType()}, {e.Message}, {e.StackTrace}");
            }
        }
Exemple #5
0
        public override void ReadPacket()
        {
            ReadHeaders(Packet);

            // Read the byte flag representing which packets
            // are included in this update
            var dataPacketIdFlag = Packet.ReadUShort();
            // Keep track of value of current bit
            var currentTypeValue = 1;

            for (var i = 0; i < Enum.GetNames(typeof(ClientPacketId)).Length; i++)
            {
                // If this bit was set in our flag, we add the type to the list
                if ((dataPacketIdFlag & currentTypeValue) != 0)
                {
                    DataPacketIds.Add((ClientPacketId)i);
                }

                // Increase the value of current bit
                currentTypeValue *= 2;
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerConnect))
            {
                PlayerConnect.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerDisconnect))
            {
                PlayerDisconnect.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerEnterScene))
            {
                PlayerEnterScene.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerAlreadyInScene))
            {
                PlayerAlreadyInScene.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerLeaveScene))
            {
                PlayerLeaveScene.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerUpdate))
            {
                PlayerUpdates.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.EntityUpdate))
            {
                EntityUpdates.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerDeath))
            {
                PlayerDeath.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerTeamUpdate))
            {
                PlayerTeamUpdate.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerSkinUpdate))
            {
                PlayerSkinUpdate.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerEmoteUpdate))
            {
                PlayerEmoteUpdate.ReadData(Packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.GameSettingsUpdated))
            {
                GameSettingsUpdate.ReadData(Packet);
            }
        }
Exemple #6
0
        public override Packet CreatePacket()
        {
            var packet = new Packet();

            WriteHeaders(packet);

            // Construct the ushort flag representing which packets are included
            // in this update, we need a ushort since we have more than 8 possible packet IDs
            ushort dataPacketIdFlag = 0;
            // Keep track of value of current bit
            ushort currentTypeValue = 1;

            for (var i = 0; i < Enum.GetNames(typeof(ClientPacketId)).Length; i++)
            {
                // Cast the current index of the loop to a ClientPacketId and check if it is
                // contained in the update type list, if so, we add the current bit to the flag
                if (DataPacketIds.Contains((ClientPacketId)i))
                {
                    dataPacketIdFlag |= currentTypeValue;
                }

                currentTypeValue *= 2;
            }

            packet.Write(dataPacketIdFlag);

            if (DataPacketIds.Contains(ClientPacketId.PlayerConnect))
            {
                PlayerConnect.WriteData(packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerDisconnect))
            {
                PlayerDisconnect.WriteData(packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerEnterScene))
            {
                PlayerEnterScene.WriteData(packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerAlreadyInScene))
            {
                PlayerAlreadyInScene.WriteData(packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerLeaveScene))
            {
                PlayerLeaveScene.WriteData(packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerUpdate))
            {
                PlayerUpdates.WriteData(packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.EntityUpdate))
            {
                EntityUpdates.WriteData(packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerDeath))
            {
                PlayerDeath.WriteData(packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerTeamUpdate))
            {
                PlayerTeamUpdate.WriteData(packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerSkinUpdate))
            {
                PlayerSkinUpdate.WriteData(packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.PlayerEmoteUpdate))
            {
                PlayerEmoteUpdate.WriteData(packet);
            }

            if (DataPacketIds.Contains(ClientPacketId.GameSettingsUpdated))
            {
                GameSettingsUpdate.WriteData(packet);
            }

            _containsReliableData = DataPacketIds.Contains(ClientPacketId.PlayerConnect) ||
                                    DataPacketIds.Contains(ClientPacketId.PlayerDisconnect) ||
                                    DataPacketIds.Contains(ClientPacketId.PlayerEnterScene) ||
                                    DataPacketIds.Contains(ClientPacketId.PlayerAlreadyInScene) ||
                                    DataPacketIds.Contains(ClientPacketId.PlayerLeaveScene) ||
                                    DataPacketIds.Contains(ClientPacketId.PlayerDeath) ||
                                    DataPacketIds.Contains(ClientPacketId.PlayerTeamUpdate) ||
                                    DataPacketIds.Contains(ClientPacketId.PlayerSkinUpdate) ||
                                    DataPacketIds.Contains(ClientPacketId.GameSettingsUpdated);

            packet.WriteLength();

            return(packet);
        }
Exemple #7
0
        private void OnPlayerConnect(PlayerConnect playerConnect)
        {
            Logger.Get().Info(this, $"Received PlayerConnect data for ID: {playerConnect.Id}");

            UI.UIManager.InfoBox.AddMessage($"Player '{playerConnect.Username}' connected to the server");
        }
 private void OnPlayerAccepted(int peerId)
 {
     PlayerConnect?.Invoke(this, new PlayerEventArgs(peerId));
 }
Exemple #9
0
        public void PacketReceived(Server.ClientInstance client, IPacket packet)
        {
            //if (!(packet is Movement))Console.WriteLine(packet.ToString());
            ServerPlayer player = GetPlayer(client);

            switch (packet.GetType().Name)
            {
            case "Connect":
                Console.WriteLine("Someone joined! (Connect Packet)");
                Connect cn = (Connect)packet;
                if (cn.Version != Server.Version)
                {
                    player.Disconnect(
                        $"Your version {cn.Version} is different from the server's version. {Server.Version}");
                    return;
                }
                var slot = GetNewPlayerSlot();
                if (slot == -1)
                {
                    player.Disconnect("Too many people are online.");
                    return;
                }
                cn.PlayerId = player.PlayerSlot = (ushort)slot;
                player.SendPacket(cn);    //kirby right back at ya
                break;

            case "Disconnect":
                Disconnect dc = (Disconnect)packet;
                Console.WriteLine("Disconnected player {0} with reason: \"{1}\"", player.PlayerName != null ? player.PlayerName : "at slot " + player.PlayerSlot, dc.Reason);
                //player.client.client.Close();
                Broadcast(new PlayerConnect {
                    PlayerId = player.PlayerSlot, Quitting = true, Reason = dc.Reason
                }, false, player, true);
                break;

            case "Movement":
                Movement mv = (Movement)packet;
                player.Position = mv.Pos;
                if (player.CurrentRoom != mv.RoomNumber)
                {
                    Console.WriteLine("{0} went to room number {1}", player.PlayerName, mv.RoomNumber);
                }
                player.CurrentRoom = mv.RoomNumber;
                mv.PlayerId        = player.PlayerSlot;
                Debug.WriteLine(mv);
                Broadcast(mv, false, player, true);
                break;

            case "PlayerConnect":
                PlayerConnect pcn = (PlayerConnect)packet;
                if (!pcn.Quitting)
                {
                    Console.WriteLine($"{pcn.Name} joined! (Player Connection Packet)");
                    player.PlayerName  = pcn.Name;
                    player.Position    = pcn.Pos;
                    player.CurrentRoom = pcn.RoomNumber;
                }
                pcn.PlayerId = player.PlayerSlot;
                Broadcast(pcn, false, player, false);
                foreach (var cpl in Players)
                {
                    if (cpl != player && cpl.client.client.Connected)
                    {
                        Console.WriteLine("{0}<-{1}", player.PlayerSlot, cpl.PlayerSlot);
                        player.SendPacket(new PlayerConnect
                        {
                            Name       = cpl.PlayerName,
                            Quitting   = false,
                            Inform     = true,
                            Pos        = cpl.Position,
                            RoomNumber = cpl.CurrentRoom,
                            PlayerId   = cpl.PlayerSlot
                        });
                        player.SendPacket(new SpriteChanged
                        {
                            SpriteIndex = cpl.SpriteIndex,
                            ImageIndex  = cpl.ImageIndex,
                            ImageSpeed  = cpl.ImageSpeed,
                            ImageXScale = cpl.ImageXScale,
                            Palette     = cpl.Palette,
                            PlayerId    = cpl.PlayerSlot,
                            IsRabbit    = cpl.IsRabbit
                        });
                    }
                }
                break;

            case "SpriteChanged":
                SpriteChanged spc = (SpriteChanged)packet;
                player.SpriteIndex = spc.SpriteIndex;
                player.ImageIndex  = spc.ImageIndex;
                player.ImageSpeed  = spc.ImageSpeed;
                player.ImageXScale = spc.ImageXScale;
                player.Palette     = spc.Palette;
                player.IsRabbit    = spc.IsRabbit;
                spc.PlayerId       = player.PlayerSlot;
                Debug.WriteLine(spc);
                Broadcast(spc, false, player, true);
                break;

            case "RerequestFaker":
                RerequestFaker rrq = new RerequestFaker();
                if (rrq.PlayerIdOf == player.PlayerSlot)
                {
                    break;
                }
                Debug.WriteLine(rrq);
                var faker = Players[rrq.PlayerIdOf];
                player.SendPacket(new PlayerConnect
                {
                    PlayerId   = rrq.PlayerIdOf,
                    Inform     = true,
                    Name       = faker.PlayerName,
                    Pos        = faker.Position,
                    Quitting   = false,
                    RoomNumber = faker.CurrentRoom
                });
                player.SendPacket(new SpriteChanged
                {
                    PlayerId    = rrq.PlayerIdOf,
                    Palette     = faker.Palette,
                    ImageIndex  = faker.ImageIndex,
                    ImageSpeed  = faker.ImageSpeed,
                    ImageXScale = faker.ImageXScale,
                    SpriteIndex = faker.SpriteIndex,
                    IsRabbit    = faker.IsRabbit
                });
                break;
            }
        }
Exemple #10
0
    void _client_OnPlayerConnect(PlayerConnect msg)
    {
        Log.Info("_client_OnPlayerConnect");

        if (msg.id != _myid && !_players.ContainsKey(msg.id))
        {
            var playerClone = (GameObject)Instantiate(Resources.Load("BaseMale/Prefabs/baseMale"));

            // GameObject playerClone = (GameObject)Instantiate(CurrentPlayer, transform.position, transform.rotation);
            _players.Add(msg.id, playerClone);
            _client_OnPlayerMove(msg as PlayerMove);
        }
    }