コード例 #1
0
ファイル: GameService.cs プロジェクト: if1live/hatsushimo
        void HandleDisconnect(Session session, DisconnectPacket p)
        {
            if (session.State == SessionState.Disconnected)
            {
                log.Info($"already disconnected: id={session.ID}");
                return;
            }

            // 연결 종료는 소켓이 끊어질떄도 있고
            // 유저가 직접 종료시키는 경우도 있다
            // disconnect를 여러번 호출해도 꺠지지 않도록 하자
            // 연결 끊은것을 연결 종료 패킷처럼 다루면
            // 상위 레이어에서의 처리가 간단해진다
            if (session.WorldID != null)
            {
                var leave = new WorldLeavePacket();
                var codec = new PacketCodec();
                var bytes = codec.Encode(leave);
                var pair  = new ReceivedPacket <WorldLeavePacket>(session, bytes);
                HandleWorldLeave(session, pair);
            }

            log.Info($"disconnect: id={session.ID}");
            var disconnect = new DisconnectPacket();

            session.SendLazy(disconnect);

            // 연결 끊어도 된다는 표시 해두기. 언제 끊어도 상관 없어야한다
            NetworkStack.Session.CloseSessionActive(session);
        }
コード例 #2
0
        void HandleLeaveReq(Session session, WorldLeavePacket p)
        {
            var holder = GetPlayerHolder(session);

            if (holder.Mode == PlayerMode.Player)
            {
                room.Leave(holder.Player);
            }
            else if (holder.Mode == PlayerMode.Observer)
            {
                room.Leave(holder.Observer);
            }
            else
            {
                return;
            }

            var ok = Leave(session);

            log.Info($"world leave: id={session.ID} world={ID} ok={ok} size={sessions.Count}");

            var resp = new WorldLeaveResultPacket(session.ID);

            session.SendLazy(resp);
        }
コード例 #3
0
ファイル: APIRunner.cs プロジェクト: if1live/hatsushimo
        public async Task <bool> WorldLeave()
        {
            var send = new WorldLeavePacket();
            var recv = await conn.SendRecv <WorldLeavePacket, WorldLeaveResultPacket>(send);

            return(true);
        }
コード例 #4
0
ファイル: TestWorldPacket.cs プロジェクト: if1live/hatsushimo
        public void TestSerde()
        {
            var a = new WorldLeavePacket()
            {
            };
            var b = SerializeAndDeserialize(a);

            Assert.Equal(a, b);
        }