Пример #1
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;
        }
Пример #2
0
 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);
 }
Пример #3
0
 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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #10
0
 void OnDisconnectedClient(ref MyControlDisconnectedMsg data, ulong sender)
 {
     RaiseClientLeft(data.Client, ChatMemberStateChangeEnum.Disconnected);
     Console.WriteLine("Disconnected: " + sender);
 }
Пример #11
0
 private void OnDisconnectedClient(ref MyControlDisconnectedMsg data, ulong sender)
 {
     this.RaiseClientLeft(data.Client, MyChatMemberStateChangeEnum.Disconnected);
     MyLog.Default.WriteLineAndConsole("Disconnected: " + sender);
 }