/// <summary> /// /// </summary> /// <param name="rawPacket"></param> /// <param name="hostId"></param> /// <param name="connectionId"></param> private void OnPlayerConnectPacket(IPacket rawPacket, int hostId, int connectionId) { var packet = rawPacket as Client.Packet.PlayerConnectPacket; if (packet == null) { return; } var allowConnection = true; var errorMessage = "None"; // Check for already existing username if (m_players.Any(x => x.Username.Equals(packet.Username, StringComparison.OrdinalIgnoreCase))) { // Username already in use. allowConnection = false; errorMessage = string.Format("The username {0} is already in use.", packet.Username); Debug.LogError(string.Format("Server: {0}", errorMessage)); } var spawnPoint = new Vector3(-280.0f, 47.5f, 338.0f); if (allowConnection) { // Try get an offline player and get their location var offlinePlayer = m_offlinePlayers.FirstOrDefault(x => x.Username.Equals(packet.Username, StringComparison.OrdinalIgnoreCase)); if (offlinePlayer != null) { spawnPoint = offlinePlayer.CurrentPosition; } // Player is valid, store them var newPlayerData = new PlayerData(connectionId, packet.Username, spawnPoint); // Player is valid, tell all other players about them. var playerJoinPacket = new Server.Packet.PlayerJoinPacket(connectionId, newPlayerData.Username, newPlayerData.CurrentPosition); QueuePacketAllExcluding(playerJoinPacket, new int[] { connectionId }); foreach (var player in m_players) { var otherPlayerJoinPack = new Server.Packet.PlayerJoinPacket(player.ConnectionId, player.Username, player.CurrentPosition); QueuePacket(otherPlayerJoinPack, connectionId); } m_players.Add(newPlayerData); if (offlinePlayer != null) { m_offlinePlayers.Remove(offlinePlayer); } SendMobSpawnPackets(newPlayerData.ConnectionId); } var handShakePacket = new Server.Packet.PlayerHandshakePacket(allowConnection, errorMessage, spawnPoint); QueuePacket(handShakePacket, connectionId); Debug.Log(string.Format("Server: Revieved player connection from {0}", packet.Username)); }
/// <summary> /// /// </summary> /// <param name="rawPacket"></param> /// <param name="hostId"></param> /// <param name="connectionId"></param> private void OnPlayerConnectPacket(IPacket rawPacket, int hostId, int connectionId) { var packet = rawPacket as Client.Packet.PlayerConnectPacket; if (packet == null) { return; } var allowConnection = true; var errorMessage = "None"; // Check for already existing username if (m_players.Any(x => x.Username.Equals(packet.Username, StringComparison.OrdinalIgnoreCase))) { // Username already in use. allowConnection = false; errorMessage = string.Format("The username {0} is already in use.", packet.Username); Debug.LogError(string.Format("Server: {0}", errorMessage)); } var spawnPoint = new Vector3(-280.0f, 47.5f, 338.0f); if (allowConnection) { // Try get an offline player and get their location var offlinePlayer = m_offlinePlayers.FirstOrDefault(x => x.Username.Equals(packet.Username, StringComparison.OrdinalIgnoreCase)); if (offlinePlayer != null) { spawnPoint = offlinePlayer.CurrentPosition; } // Player is valid, store them var newPlayerData = new PlayerData(connectionId, packet.Username, spawnPoint); // Player is valid, tell all other players about them. var playerJoinPacket = new Server.Packet.PlayerJoinPacket(connectionId, newPlayerData.Username, newPlayerData.CurrentPosition); QueuePacketAllExcluding(playerJoinPacket, new int[] { connectionId }); foreach (var player in m_players) { var otherPlayerJoinPack = new Server.Packet.PlayerJoinPacket(player.ConnectionId, player.Username, player.CurrentPosition); QueuePacket(otherPlayerJoinPack, connectionId); } m_players.Add(newPlayerData); if (offlinePlayer != null) { m_offlinePlayers.Remove(offlinePlayer); } SendMobSpawnPackets(newPlayerData.ConnectionId); } var handShakePacket = new Server.Packet.PlayerHandshakePacket(allowConnection, errorMessage, spawnPoint); QueuePacket(handShakePacket, connectionId); Debug.Log(string.Format("Server: Revieved player connection from {0}", packet.Username)); }