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}"); }
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}"); }
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}"); }
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}의 접속이 종료되었습니다."); }