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; } }
public Player PlayerJoined() { var resp = connection.WaitMessage(); // Ожидаем сообщения switch (resp.Type) { case TypeCommand.JoinGame: { PlayerConnect?.Invoke(); return(Player.ToObject(resp[0])); } default: throw new Exception(":)"); } }
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); } } }
/// <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}"); } }
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); } }
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); }
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)); }
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; } }
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); } }