コード例 #1
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);
        }
コード例 #2
0
        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);

            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;
        }
コード例 #3
0
        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;
        }