Пример #1
0
        async Task IStatusPacketGenerator.Ping(long payload)
        {
            var tcs = new TaskCompletionSource <object>();

            _pendingPings[payload] = tcs;
            await _packetSink.SendPacket(new Ping { Payload = payload });

            await tcs.Task;
        }
Пример #2
0
        async Task <LoginStartResponse> ILoginPacketGenerator.LoginStart(string name)
        {
            var tcs = new TaskCompletionSource <LoginStartResponse>();

            _pendingLogins.Enqueue(tcs);
            await _packetSink.SendPacket(new LoginStart { Name = name });

            return(await tcs.Task);
        }
Пример #3
0
        async Task IHandshakingPacketGenerator.Handshake(uint protocolVersion, string serverAddress, ushort serverPort, uint nextState)
        {
            if (nextState != 1 && nextState != 2)
            {
                throw new ArgumentOutOfRangeException(nameof(nextState));
            }

            await _packetSink.SendPacket(new Handshake
            {
                ProtocolVersion = protocolVersion,
                ServerAddress   = serverAddress,
                ServerPort      = serverPort,
                NextState       = nextState
            });

            _packetRouter.State = nextState == 1 ? SessionState.Status : SessionState.Login;
        }