private void CloseClient() { MyTrace.Send(TraceWindow.Multiplayer, "Multiplayer client closed"); if (m_clientJoined) { MyControlDisconnectedMsg msg = new MyControlDisconnectedMsg(); msg.Client = MySteam.UserId; SendControlMessage(ServerId, ref msg); } OnJoin = null; //TODO: Any better way? P2P needs to be closed from both sides. If closed right after Send, message //can stay not sent. Thread.Sleep(200); //WARN: If closed here, previous control message probably not come Peer2Peer.CloseSession(ServerId); CloseMemberSessions(); Peer2Peer.ConnectionFailed -= Peer2Peer_ConnectionFailed; Peer2Peer.SessionRequest -= Peer2Peer_SessionRequest; }
private void MyDedicatedServer_ClientLeft(ulong user, MyChatMemberStateChangeEnum arg2) { MyGameService.Peer2Peer.CloseSession(user); MyLog.Default.WriteLineAndConsole("User left " + this.GetMemberName(user)); if (this.m_members.Contains(user)) { this.m_members.Remove(user); } if (this.m_pendingMembers.ContainsKey(user)) { this.m_pendingMembers.Remove(user); } if (this.m_waitingForGroup.Contains(user)) { this.m_waitingForGroup.Remove(user); } if ((arg2 != MyChatMemberStateChangeEnum.Kicked) && (arg2 != MyChatMemberStateChangeEnum.Banned)) { foreach (ulong num in this.m_members) { if (num != base.ServerId) { MyControlDisconnectedMsg message = new MyControlDisconnectedMsg { Client = user }; base.SendControlMessage <MyControlDisconnectedMsg>(num, ref message, true); } } } MyGameService.GameServer.SendUserDisconnect(user); this.MemberDataRemove(user); }
public override void Dispose() { foreach (ulong num in this.m_members) { MyControlDisconnectedMsg message = new MyControlDisconnectedMsg { Client = base.ServerId }; if (num != base.ServerId) { base.SendControlMessage <MyControlDisconnectedMsg>(num, ref message, true); } } Thread.Sleep(200); try { base.CloseMemberSessions(); MyGameService.GameServer.EnableHeartbeats(false); base.Dispose(); MyLog.Default.WriteLineAndConsole("Logging off Steam..."); MyGameService.GameServer.LogOff(); MyLog.Default.WriteLineAndConsole("Shutting down server..."); MyGameService.GameServer.Shutdown(); MyLog.Default.WriteLineAndConsole("Done"); MyGameService.Peer2Peer.SessionRequest -= new Action <ulong>(this.Peer2Peer_SessionRequest); MyGameService.Peer2Peer.ConnectionFailed -= new Action <ulong, string>(this.Peer2Peer_ConnectionFailed); base.ClientLeft -= new Action <ulong, MyChatMemberStateChangeEnum>(this.MyDedicatedServer_ClientLeft); } catch (Exception exception) { MyLog.Default.WriteLineAndConsole("catch exception : " + exception); } }
public override void DisconnectClient(ulong userId) { MyControlDisconnectedMsg msg = new MyControlDisconnectedMsg(); msg.Client = ServerId; SendControlMessage(userId, ref msg); RaiseClientLeft(userId, ChatMemberStateChangeEnum.Disconnected); }
public override void DisconnectClient(ulong userId) { MyControlDisconnectedMsg message = new MyControlDisconnectedMsg { Client = base.ServerId }; base.SendControlMessage <MyControlDisconnectedMsg>(userId, ref message, true); base.RaiseClientLeft(userId, MyChatMemberStateChangeEnum.Disconnected); }
private void CloseClient() { MyControlDisconnectedMsg message = new MyControlDisconnectedMsg { Client = Sync.MyId }; base.SendControlMessage <MyControlDisconnectedMsg>(base.ServerId, ref message, true); this.OnJoin = null; Thread.Sleep(200); this.CloseSession(); }
private void CloseClient() { MyTrace.Send(TraceWindow.Multiplayer, "Multiplayer client closed"); MyControlDisconnectedMsg msg = new MyControlDisconnectedMsg(); msg.Client = Sync.MyId; SendControlMessage(ServerId, ref msg); OnJoin = null; //TODO: Any better way? P2P needs to be closed from both sides. If closed right after Send, message //can stay not sent. Thread.Sleep(200); CloseSession(); }
public override void Dispose() { MyTrace.Send(TraceWindow.Multiplayer, "Multiplayer closed"); foreach (var member in m_members) { MyControlDisconnectedMsg msg = new MyControlDisconnectedMsg(); msg.Client = ServerId; if (member != ServerId) { SendControlMessage(member, ref msg); } } //TODO: Any better way? P2P needs to be closed from both sides. If closed right after Send, message //can stay not sent. Thread.Sleep(200); try { CloseMemberSessions(); SteamSDK.SteamServerAPI.Instance.GameServer.EnableHeartbeats(false); base.Dispose(); MyLog.Default.WriteLineAndConsole("Logging off Steam..."); SteamSDK.SteamServerAPI.Instance.GameServer.LogOff(); MyLog.Default.WriteLineAndConsole("Shutting down server..."); SteamSDK.SteamServerAPI.Instance.GameServer.Shutdown(); MyLog.Default.WriteLineAndConsole("Done"); SteamSDK.Peer2Peer.SessionRequest -= Peer2Peer_SessionRequest; SteamSDK.Peer2Peer.ConnectionFailed -= Peer2Peer_ConnectionFailed; ClientLeft -= MyDedicatedServer_ClientLeft; } catch (Exception ex) { MyLog.Default.WriteLineAndConsole("catch exception : " + ex.ToString()); } }
void MyDedicatedServer_ClientLeft(ulong user, ChatMemberStateChangeEnum arg2) { Peer2Peer.CloseSession(user); MyLog.Default.WriteLineAndConsole("User left " + GetMemberName(user)); if (m_members.Contains(user)) { m_members.Remove(user); } if (m_pendingMembers.ContainsKey(user)) { m_pendingMembers.Remove(user); } if (m_waitingForGroup.Contains(user)) { m_waitingForGroup.Remove(user); } if (arg2 != ChatMemberStateChangeEnum.Kicked && arg2 != ChatMemberStateChangeEnum.Banned) { foreach (var member in m_members) { if (member != ServerId) { MyControlDisconnectedMsg msg = new MyControlDisconnectedMsg(); msg.Client = user; SendControlMessage(member, ref msg); } } } SteamSDK.SteamServerAPI.Instance.GameServer.SendUserDisconnect(user); m_memberData.Remove(user); }
void OnDisconnectedClient(ref MyControlDisconnectedMsg data, ulong sender) { RaiseClientLeft(data.Client, ChatMemberStateChangeEnum.Disconnected); Console.WriteLine("Disconnected: " + sender); }
private void OnDisconnectedClient(ref MyControlDisconnectedMsg data, ulong sender) { this.RaiseClientLeft(data.Client, MyChatMemberStateChangeEnum.Disconnected); MyLog.Default.WriteLineAndConsole("Disconnected: " + sender); }