Пример #1
0
 public override void OnDisconnected(EndPoint endPoint)
 {
     SessionManager.Instance.Remove(this);
     if (Room != null)
     {
         GameRoom room = Room;
         Room.Push(() => room.Leave(this));
         Room = null;
     }
     Console.WriteLine($"OnDisconnected : {endPoint}");
 }
Пример #2
0
 public override void OnDisConnected(EndPoint endPoint)
 {
     SessionManager.Instance.Remove(this);
     if (Room != null)
     {
         GameRoom room = Room; // 이렇게 함으로 인해 잡큐에 작업자가 Room이 null이 되도 room에 있는 정보로 보기때문에 문제 되지않음.
         room.Push(() => room.Leave(this));
         Room = null;
     }
     Console.WriteLine($"OnDisConnected : {endPoint}");
 }
Пример #3
0
        public override void OnDisconnected(EndPoint endPoint)
        {
            SessionManager.Instance.Remove(this);
            if (Room != null)
            {
                GameRoom room = Room;
                room.Push(() => room.Leave(this));
                Room = null;
            }

            IPEndPoint ipEndPoint = endPoint as IPEndPoint;

            Console.WriteLine($"OnDisconnected: {ipEndPoint.Address}:{ipEndPoint.Port}");
        }
Пример #4
0
        public override void OnDisconnected(EndPoint endPoint)
        {
            SessionManager.Instance.Remove(this);
            if (Room != null)
            {
                // * 수정된 부분
                // 이제 Leave를 바로 실행하지 않고, 해야 할 작업으로 JobQueue에 넘겨준다.
                // GameRoom을 별고로 선언, Room을 저장해둬서 클라이언트가 종료되어도 참조 카운트가 유지되게 한다.
                // (그렇지 않으면 클라 종료 후 Room이 null이 되어 JobQueue에서 작업을 처리하려 할 때 크래시가 난다)
                GameRoom room = Room;
                room.Push(() => room.Leave(this));
                Room = null;
            }

            Console.WriteLine($"{endPoint}의 접속이 종료되었습니다.");
        }