void MyMultiplayerClient_ClientLeft(ulong user, ChatMemberStateChangeEnum stateChange) { if (user == ServerId) { RaiseHostLeft(); return; } if (m_members.Contains(user)) { m_members.Remove(user); MySandboxGame.Log.WriteLineAndConsole("Player disconnected: " + MySteam.API.Friends.GetPersonaName(user) + " (" + user + ")"); MyTrace.Send(TraceWindow.Multiplayer, "Player disconnected: " + stateChange.ToString()); if (MySandboxGame.IsGameReady && Sync.MyId != user) { var clientLeft = new MyHudNotification(MyCommonTexts.NotificationClientDisconnected, 5000, level: MyNotificationLevel.Important); clientLeft.SetTextFormatArguments(MySteam.API.Friends.GetPersonaName(user)); MyHud.Notifications.Add(clientLeft); } //Peer2Peer.CloseSession(user); } m_memberData.Remove(user); }
void MyMultiplayerLobby_ClientLeft(ulong userId, ChatMemberStateChangeEnum stateChange) { Peer2Peer.CloseSession(userId); MySandboxGame.Log.WriteLineAndConsole("Player left: " + GetMemberName(userId) + " (" + userId + ")"); MyTrace.Send(TraceWindow.Multiplayer, "Player left: " + stateChange.ToString()); }
protected void RaiseClientLeft(ulong changedUser, ChatMemberStateChangeEnum stateChange) { var handler = ClientLeft; if (handler != null) { handler(changedUser, stateChange); } }
private void OnClientLeft(ulong steamId, ChatMemberStateChangeEnum stateChange) { Players.TryGetValue(steamId, out PlayerViewModel vm); if (vm == null) { vm = new PlayerViewModel(steamId); } Log.Info($"{vm.Name} ({vm.SteamId}) {(ConnectionState)stateChange}."); PlayerLeft?.Invoke(vm); Players.Remove(steamId); }
void Peer2Peer_ConnectionFailed(ulong remoteUserId, P2PSessionErrorEnum error) { m_members.Remove(remoteUserId); ChatMemberStateChangeEnum reason = ChatMemberStateChangeEnum.Left; switch (error) { case P2PSessionErrorEnum.Timeout: reason = ChatMemberStateChangeEnum.Disconnected; break; } RaiseClientLeft(remoteUserId, reason); }
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 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 multiplayer_ClientLeft(ulong steamUserId, ChatMemberStateChangeEnum leaveReason) { Clients.RemoveClient(steamUserId); }
void MyMultiplayerClient_ClientLeft(ulong user, ChatMemberStateChangeEnum stateChange) { if (user == ServerId) { RaiseHostLeft(); return; } if (m_members.Contains(user)) { m_members.Remove(user); MySandboxGame.Log.WriteLineAndConsole("Player disconnected: " + MySteam.API.Friends.GetPersonaName(user) + " (" + user + ")"); MyTrace.Send(TraceWindow.Multiplayer, "Player disconnected: " + stateChange.ToString()); if (MySandboxGame.IsGameReady && MySteam.UserId != user) { var clientLeft = new MyHudNotification(MySpaceTexts.NotificationClientDisconnected, 5000, level: MyNotificationLevel.Important); clientLeft.SetTextFormatArguments(MySteam.API.Friends.GetPersonaName(user)); MyHud.Notifications.Add(clientLeft); } Peer2Peer.CloseSession(user); } m_memberData.Remove(user); }
void Matchmaking_LobbyChatUpdate(Lobby lobby, ulong changedUser, ulong makingChangeUser, ChatMemberStateChangeEnum stateChange) { //System.Diagnostics.Debug.Assert(MySession.Static != null); if (lobby.LobbyId == Lobby.LobbyId) { if (stateChange == ChatMemberStateChangeEnum.Entered) { MySandboxGame.Log.WriteLineAndConsole("Player entered: " + MySteam.API.Friends.GetPersonaName(changedUser) + " (" + changedUser + ")"); MyTrace.Send(TraceWindow.Multiplayer, "Player entered"); Peer2Peer.AcceptSession(changedUser); // When some clients connect at the same time then some of them can have already added clients // (see function MySyncLayer.RegisterClientEvents which registers all Members in Lobby). if (Sync.Clients == null || !Sync.Clients.HasClient(changedUser)) { RaiseClientJoined(changedUser); } if (MySandboxGame.IsGameReady && changedUser != ServerId) { // Player is able to connect to the battle which already started - player is then kicked and we do not want to show connected message in HUD. bool showMsg = true; if (MyFakes.ENABLE_BATTLE_SYSTEM && MySession.Static != null && MySession.Static.Battle && !BattleCanBeJoined) { showMsg = false; } if (showMsg) { var playerJoined = new MyHudNotification(MyCommonTexts.NotificationClientConnected, 5000, level: MyNotificationLevel.Important); playerJoined.SetTextFormatArguments(MySteam.API.Friends.GetPersonaName(changedUser)); MyHud.Notifications.Add(playerJoined); } } } else { // Kicked client can be already removed from Clients if (Sync.Clients == null || Sync.Clients.HasClient(changedUser)) { RaiseClientLeft(changedUser, stateChange); } if (changedUser == ServerId) { MyTrace.Send(TraceWindow.Multiplayer, "Host left: " + stateChange.ToString()); RaiseHostLeft(); MySessionLoader.UnloadAndExitToMenu(); MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( messageCaption: MyTexts.Get(MyCommonTexts.MessageBoxCaptionError), messageText: MyTexts.Get(MyCommonTexts.MultiplayerErrorServerHasLeft))); // Set new server //ServerId = Lobby.GetOwner(); //if (ServerId == Sync.MyId) //{ // Lobby.SetLobbyData(HostNameTag, Sync.MyName); //} } else if (MySandboxGame.IsGameReady) { var playerLeft = new MyHudNotification(MyCommonTexts.NotificationClientDisconnected, 5000, level: MyNotificationLevel.Important); playerLeft.SetTextFormatArguments(MySteam.API.Friends.GetPersonaName(changedUser)); MyHud.Notifications.Add(playerLeft); } } } }
// { // [MethodImpl(MethodImplOptions.Synchronized)] // add // { // this.<backing_store>LobbyChatUpdate = (LobbyChatUpdateDelegate)Delegate.Combine(this.<backing_store>LobbyChatUpdate, value); // } // [MethodImpl(MethodImplOptions.Synchronized)] // remove // { // this.<backing_store>LobbyChatUpdate = (LobbyChatUpdateDelegate)Delegate.Remove(this.<backing_store>LobbyChatUpdate, value); // } // } // internal Matchmaking() // { // CallbackHolder<0> this2 = new CallbackHolder<0>(); // try // { // this.m_holder = this2; // base..ctor(); // this.m_holder.AddNative<SteamSDK::Matchmaking,LobbyChatUpdate_t>(this, ldftn(lobbyChatUpdate)); // this.m_holder.AddNative<SteamSDK::Matchmaking,LobbyDataUpdate_t>(this, ldftn(lobbyDataUpdate)); // this.m_holder.AddNative<SteamSDK::Matchmaking,GameLobbyJoinRequested_t>(this, ldftn(lobbyJoinRequest)); // this.m_holder.AddNative<SteamSDK::Matchmaking,LobbyChatMsg_t>(this, ldftn(lobbyChatMsg)); // this.m_holder.AddNative<SteamSDK::Matchmaking,GameServerChangeRequested_t>(this, ldftn(serverChangeRequest)); // } // catch // { // ((IDisposable)this.m_holder).Dispose(); // throw; // } // } // internal unsafe static void lobbyChatUpdate(Matchmaking owner, LobbyChatUpdate_t* data) // { // Lobby data2; // data2.LobbyId = (ulong)(*(long*)data); // LobbyChatUpdateDelegate owner2 = owner.<backing_store>LobbyChatUpdate; // if (owner2 != null) // { // owner2(data2, (ulong)(*(long*)(data + 8L / (long)sizeof(LobbyChatUpdate_t))), (ulong)(*(long*)(data + 16L / (long)sizeof(LobbyChatUpdate_t))), (ChatMemberStateChangeEnum)(*(int*)(data + 24L / (long)sizeof(LobbyChatUpdate_t)))); // } // } // internal unsafe static void lobbyDataUpdate(Matchmaking owner, LobbyDataUpdate_t* data) // { // Lobby lobby; // lobby.LobbyId = (ulong)(*(long*)data); // byte data2 = (*(byte*)(data + 16L / (long)sizeof(LobbyDataUpdate_t)) != 0) ? 1 : 0; // LobbyDataUpdate owner2 = owner.<backing_store>LobbyDataUpdate; // if (owner2 != null) // { // owner2(data2 != 0, lobby, (ulong)(*(long*)(data + 8L / (long)sizeof(LobbyDataUpdate_t)))); // } // } // internal unsafe static void lobbyJoinRequest(Matchmaking owner, GameLobbyJoinRequested_t* data) // { // Lobby data2; // data2.LobbyId = (ulong)(*(long*)data); // LobbyJoinRequestDelegate owner2 = owner.<backing_store>LobbyJoinRequest; // if (owner2 != null) // { // owner2(data2, (ulong)(*(long*)(data + 8L / (long)sizeof(GameLobbyJoinRequested_t)))); // } // } // internal unsafe static void lobbyChatMsg(Matchmaking owner, LobbyChatMsg_t* data) // { // Lobby data2; // data2.LobbyId = (ulong)(*(long*)data); // LobbyChatMsgDelegate owner2 = owner.<backing_store>LobbyChatMsg; // if (owner2 != null) // { // owner2(data2, (ulong)(*(long*)(data + 8L / (long)sizeof(LobbyChatMsg_t))), *(byte*)(data + 16L / (long)sizeof(LobbyChatMsg_t)), (uint)(*(int*)(data + 20L / (long)sizeof(LobbyChatMsg_t)))); // } // } // internal unsafe static void serverChangeRequest(Matchmaking owner, GameServerChangeRequested_t* data) // { // string password = new string((sbyte*)(data + 64L / (long)sizeof(GameServerChangeRequested_t))); // string data2 = new string((sbyte*)data); // ServerChangeRequestDelegate owner2 = owner.<backing_store>ServerChangeRequest; // if (owner2 != null) // { // owner2(data2, password); // } // } protected void raise_LobbyChatUpdate(Lobby value0, ulong value1, ulong value2, ChatMemberStateChangeEnum value3) { //LobbyChatUpdateDelegate lobbyChatUpdateDelegate = this.<backing_store>LobbyChatUpdate; LobbyChatUpdateDelegate lobbyChatUpdateDelegate = this.LobbyChatUpdate; if (lobbyChatUpdateDelegate != null) { lobbyChatUpdateDelegate(value0, value1, value2, value3); } }
void MyMultiplayerLobby_ClientLeft(ulong userId, ChatMemberStateChangeEnum stateChange) { if (userId == ServerId) { Peer2Peer.CloseSession(userId); } MySandboxGame.Log.WriteLineAndConsole("Player left: " + GetMemberName(userId) + " (" + userId + ")"); MyTrace.Send(TraceWindow.Multiplayer, "Player left: " + stateChange.ToString()); }
protected void Multiplayer_PlayerLeft(ulong userId, ChatMemberStateChangeEnum arg2) { RemovePlayer(userId); }
private void OnClientLeft(ulong steamId, ChatMemberStateChangeEnum stateChange) { _log.Info($"{GetSteamUsername(steamId)} disconnected ({(ConnectionState)stateChange})."); PlayerLeft?.Invoke(steamId, (ConnectionState)stateChange); }
void Matchmaking_LobbyChatUpdate(Lobby lobby, ulong changedUser, ulong makingChangeUser, ChatMemberStateChangeEnum stateChange) { //System.Diagnostics.Debug.Assert(MySession.Static != null); if (lobby.LobbyId == Lobby.LobbyId) { if (stateChange == ChatMemberStateChangeEnum.Entered) { MySandboxGame.Log.WriteLineAndConsole("Player entered: " + MySteam.API.Friends.GetPersonaName(changedUser) + " (" + changedUser + ")"); MyTrace.Send(TraceWindow.Multiplayer, "Player entered"); Peer2Peer.AcceptSession(changedUser); RaiseClientJoined(changedUser); if (MySandboxGame.IsGameReady && changedUser != ServerId) { var playerJoined = new MyHudNotification(MySpaceTexts.NotificationClientConnected, 5000, level: MyNotificationLevel.Important); playerJoined.SetTextFormatArguments(MySteam.API.Friends.GetPersonaName(changedUser)); MyHud.Notifications.Add(playerJoined); } } else { // Kicked client can be already removed from Clients if (Sync.Clients.HasClient(changedUser)) { RaiseClientLeft(changedUser, stateChange); } if (changedUser == ServerId) { MyTrace.Send(TraceWindow.Multiplayer, "Host left: " + stateChange.ToString()); RaiseHostLeft(); MyGuiScreenMainMenu.UnloadAndExitToMenu(); MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( messageCaption: MyTexts.Get(MySpaceTexts.MessageBoxCaptionError), messageText: MyTexts.Get(MySpaceTexts.MultiplayerErrorServerHasLeft))); // Set new server //ServerId = Lobby.GetOwner(); //if (ServerId == Sync.MyId) //{ // Lobby.SetLobbyData(HostNameTag, Sync.MyName); //} } else if (MySandboxGame.IsGameReady) { var playerLeft = new MyHudNotification(MySpaceTexts.NotificationClientDisconnected, 5000, level: MyNotificationLevel.Important); playerLeft.SetTextFormatArguments(MySteam.API.Friends.GetPersonaName(changedUser)); MyHud.Notifications.Add(playerLeft); } } } }
void Matchmaking_LobbyChatUpdate(Lobby lobby, ulong changedUser, ulong makingChangeUser, ChatMemberStateChangeEnum stateChange) { //System.Diagnostics.Debug.Assert(MySession.Static != null); if (lobby.LobbyId == Lobby.LobbyId) { if (stateChange == ChatMemberStateChangeEnum.Entered) { MySandboxGame.Log.WriteLineAndConsole("Player entered: " + MySteam.API.Friends.GetPersonaName(changedUser) + " (" + changedUser + ")"); MyTrace.Send(TraceWindow.Multiplayer, "Player entered"); Peer2Peer.AcceptSession(changedUser); RaiseClientJoined(changedUser); if (MySandboxGame.IsGameReady && changedUser != ServerId) { var playerJoined = new MyHudNotification(MySpaceTexts.NotificationClientConnected, 5000, level: MyNotificationLevel.Important); playerJoined.SetTextFormatArguments(MySteam.API.Friends.GetPersonaName(changedUser)); MyHud.Notifications.Add(playerJoined); } } else { // Kicked client can be already removed from Clients if (Sync.Clients.HasClient(changedUser)) RaiseClientLeft(changedUser, stateChange); if (changedUser == ServerId) { MyTrace.Send(TraceWindow.Multiplayer, "Host left: " + stateChange.ToString()); RaiseHostLeft(); MyGuiScreenMainMenu.UnloadAndExitToMenu(); MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( messageCaption: MyTexts.Get(MySpaceTexts.MessageBoxCaptionError), messageText: MyTexts.Get(MySpaceTexts.MultiplayerErrorServerHasLeft))); // Set new server //ServerId = Lobby.GetOwner(); //if (ServerId == Sync.MyId) //{ // Lobby.SetLobbyData(HostNameTag, Sync.MyName); //} } else if (MySandboxGame.IsGameReady) { var playerLeft = new MyHudNotification(MySpaceTexts.NotificationClientDisconnected, 5000, level: MyNotificationLevel.Important); playerLeft.SetTextFormatArguments(MySteam.API.Friends.GetPersonaName(changedUser)); MyHud.Notifications.Add(playerLeft); } } } }
void Matchmaking_LobbyChatUpdate(Lobby lobby, ulong changedUser, ulong makingChangeUser, ChatMemberStateChangeEnum stateChange) { //System.Diagnostics.Debug.Assert(MySession.Static != null); if (lobby.LobbyId == Lobby.LobbyId) { if (stateChange == ChatMemberStateChangeEnum.Entered) { MySandboxGame.Log.WriteLineAndConsole("Player entered: " + MySteam.API.Friends.GetPersonaName(changedUser) + " (" + changedUser + ")"); MyTrace.Send(TraceWindow.Multiplayer, "Player entered"); Peer2Peer.AcceptSession(changedUser); // When some clients connect at the same time then some of them can have already added clients // (see function MySyncLayer.RegisterClientEvents which registers all Members in Lobby). if (Sync.Clients == null || !Sync.Clients.HasClient(changedUser)) { RaiseClientJoined(changedUser); // Battles - send all clients, identities, players, factions as first message to client if ((Battle || Scenario) && changedUser != Sync.MyId) { SendAllMembersDataToClient(changedUser); } } if (MySandboxGame.IsGameReady && changedUser != ServerId) { // Player is able to connect to the battle which already started - player is then kicked and we do not want to show connected message in HUD. bool showMsg = true; if (MyFakes.ENABLE_BATTLE_SYSTEM && MySession.Static != null && MySession.Static.Battle && !BattleCanBeJoined) showMsg = false; if (showMsg) { var playerJoined = new MyHudNotification(MyCommonTexts.NotificationClientConnected, 5000, level: MyNotificationLevel.Important); playerJoined.SetTextFormatArguments(MySteam.API.Friends.GetPersonaName(changedUser)); MyHud.Notifications.Add(playerJoined); } } } else { // Kicked client can be already removed from Clients if (Sync.Clients == null || Sync.Clients.HasClient(changedUser)) RaiseClientLeft(changedUser, stateChange); if (changedUser == ServerId) { MyTrace.Send(TraceWindow.Multiplayer, "Host left: " + stateChange.ToString()); RaiseHostLeft(); MyGuiScreenMainMenu.UnloadAndExitToMenu(); MyGuiSandbox.AddScreen(MyGuiSandbox.CreateMessageBox( messageCaption: MyTexts.Get(MyCommonTexts.MessageBoxCaptionError), messageText: MyTexts.Get(MyCommonTexts.MultiplayerErrorServerHasLeft))); // Set new server //ServerId = Lobby.GetOwner(); //if (ServerId == Sync.MyId) //{ // Lobby.SetLobbyData(HostNameTag, Sync.MyName); //} } else if (MySandboxGame.IsGameReady) { var playerLeft = new MyHudNotification(MyCommonTexts.NotificationClientDisconnected, 5000, level: MyNotificationLevel.Important); playerLeft.SetTextFormatArguments(MySteam.API.Friends.GetPersonaName(changedUser)); MyHud.Notifications.Add(playerLeft); } } } }