public void OnDisconnected(IConnection conn, MpDisconnectReason reason) { if (conn.State == ConnectionStateEnum.Disconnected) { return; } ServerPlayer player = conn.serverPlayer; players.Remove(player); if (player.IsPlaying) { if (!players.Any(p => p.FactionId == player.FactionId)) { byte[] data = ByteWriter.GetBytes(player.FactionId); SendCommand(CommandType.FactionOffline, ScheduledCommand.NoFaction, ScheduledCommand.Global, data); } SendNotification("MpPlayerDisconnected", conn.username); SendChat($"{conn.username} has left."); SendToAll(Packets.Server_PlayerList, new object[] { (byte)PlayerListAction.Remove, player.id }); } conn.State = ConnectionStateEnum.Disconnected; MpLog.Log($"Disconnected ({reason}): {conn}"); }
public override void Close(MpDisconnectReason reason, byte[] data) { if (State != ConnectionStateEnum.ClientSteam) { Send(Packets.Special_Steam_Disconnect, GetDisconnectBytes(reason, data)); } }
public void HandleDisconnectReason(MpDisconnectReason reason, byte[] data) { var reader = new ByteReader(data); string reasonKey = null; string descKey = null; if (reason == MpDisconnectReason.Generic) reasonKey = reader.ReadString(); if (reason == MpDisconnectReason.Protocol) { reasonKey = "MpWrongProtocol"; descKey = "MpWrongModVersionInfo"; } if (reason == MpDisconnectReason.UsernameLength) { reasonKey = "MpInvalidUsernameLength"; descKey = "MpChangeUsernameInfo"; } if (reason == MpDisconnectReason.UsernameChars) { reasonKey = "MpInvalidUsernameChars"; descKey = "MpChangeUsernameInfo"; } if (reason == MpDisconnectReason.UsernameAlreadyOnline) { reasonKey = "MpInvalidUsernameAlreadyPlaying"; descKey = "MpChangeUsernameInfo"; } if (reason == MpDisconnectReason.ServerClosed) reasonKey = "MpServerClosed"; if (reason == MpDisconnectReason.ServerFull) reasonKey = "MpServerFull"; if (reason == MpDisconnectReason.Kick) reasonKey = "MpKicked"; if (reason == MpDisconnectReason.Defs) { foreach (var local in mods.defInfo) local.Value.status = (DefCheckStatus)reader.ReadByte(); } disconnectReason = reason; disconnectReasonKey = reasonKey?.Translate(); disconnectInfo = descKey?.Translate(); }
public void Disconnect(MpDisconnectReason reason, byte[] data = null) { conn.Close(reason, data); Server.OnDisconnected(conn, reason); }
public void HandleDisconnectReason(MpDisconnectReason reason, byte[] data) { var reader = new ByteReader(data); string reasonKey = null; string descKey = null; if (reason == MpDisconnectReason.Generic) { reasonKey = reader.ReadString(); } if (reason == MpDisconnectReason.Protocol) { reasonKey = "MpWrongProtocol"; string strVersion = data.Length != 0 ? reader.ReadString() : "0.4.2"; int proto = data.Length != 0 ? reader.ReadInt32() : 11; disconnectInfo = "MpWrongMultiplayerVersionInfo".Translate(strVersion, proto); } if (reason == MpDisconnectReason.UsernameLength) { reasonKey = "MpInvalidUsernameLength"; descKey = "MpChangeUsernameInfo"; } if (reason == MpDisconnectReason.UsernameChars) { reasonKey = "MpInvalidUsernameChars"; descKey = "MpChangeUsernameInfo"; } if (reason == MpDisconnectReason.UsernameAlreadyOnline) { reasonKey = "MpInvalidUsernameAlreadyPlaying"; descKey = "MpChangeUsernameInfo"; } if (reason == MpDisconnectReason.ServerClosed) { reasonKey = "MpServerClosed"; } if (reason == MpDisconnectReason.ServerFull) { reasonKey = "MpServerFull"; } if (reason == MpDisconnectReason.Kick) { reasonKey = "MpKicked"; } if (reason == MpDisconnectReason.Defs) { foreach (var local in mods.defInfo) { var status = (DefCheckStatus)reader.ReadByte(); local.Value.status = status; if (MultiplayerMod.arbiterInstance && status != DefCheckStatus.OK) { Log.Message($"{local.Key}: {status}"); } } } disconnectReason = reason; disconnectReasonKey = reasonKey?.Translate(); disconnectInfo = disconnectInfo ?? descKey?.Translate(); }
public override void Close(MpDisconnectReason reason, byte[] data) { peer.NetManager.TriggerUpdate(); // todo: is this needed? peer.NetManager.DisconnectPeer(peer, GetDisconnectBytes(reason, data)); }
public override void Close(MpDisconnectReason reason, byte[] data) { }