Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        protected void RaiseClientLeft(ulong changedUser, ChatMemberStateChangeEnum stateChange)
        {
            var handler = ClientLeft;

            if (handler != null)
            {
                handler(changedUser, stateChange);
            }
        }
Ejemplo n.º 4
0
 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);
 }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
 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);
        }                             
Ejemplo n.º 10
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 11
0
        // {
        //     [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);
             }
         }
Ejemplo n.º 12
0
        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());
        }
Ejemplo n.º 13
0
 protected void Multiplayer_PlayerLeft(ulong userId, ChatMemberStateChangeEnum arg2)
 {
     RemovePlayer(userId);
 }
Ejemplo n.º 14
0
 private void OnClientLeft(ulong steamId, ChatMemberStateChangeEnum stateChange)
 {
     _log.Info($"{GetSteamUsername(steamId)} disconnected ({(ConnectionState)stateChange}).");
     PlayerLeft?.Invoke(steamId, (ConnectionState)stateChange);
 }
Ejemplo n.º 15
0
 protected void Multiplayer_PlayerLeft(ulong userId, ChatMemberStateChangeEnum arg2)
 {
     RemovePlayer(userId);
 }
Ejemplo n.º 16
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 17
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 18
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 19
0
        // {
        //     [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);
            }
        }