Esempio n. 1
0
    static void Main(string[] args)
    {
        PKG.AllTypes.Register();
        var loop = new xx.UvLoop();

        loop.InitRpcManager(1000, 10);
        loop.InitTimeoutManager(1000, 30, 5);
        var client = new xx.UvTcpClient(loop);

        client.SetAddress("127.0.0.1", 10001);
        client.OnConnect = status =>
        {
            if (status != 0)
            {
                Console.WriteLine("connect to server_login failed. status = " + status);
                return;
            }
            Console.WriteLine("connected.");

            var a = new PKG.Client_Login.Auth {
                username = "******", password = "******"
            };
            if (System.Environment.TickCount % 5 == 0)
            {
                a.password = "******";
            }
            client.SendRequestEx(a, recv =>
            {
                if (recv == null)
                {
                    Console.WriteLine("recv == null( timeout )");
                    return;
                }
                Console.WriteLine("PKG.Client_Login.Auth recv: " + recv);

                switch (recv)
                {
                case PKG.Generic.Error o:
                    client.Disconnect();
                    break;

                case PKG.Generic.Success o:
                    break;

                default:
                    break;
                }
            });
        };
        var timer = new xx.UvTimer(loop, 1000, 2000, () =>
        {
            if (client.state == xx.UvTcpStates.Disconnected)
            {
                Console.WriteLine("connect to server_login...");
                client.Connect();
            }
        });

        loop.Run();
    }
Esempio n. 2
0
    public void Handle_Auth(uint serial, PKG.Client_Login.Auth a, xx.UvTcpPeer peer)
    {
        // 如果还没有连上
        if (!dbClient.alive)
        {
            peer.SendResponse(serial, new PKG.Generic.Error { number = -1, text = "dbClient disconnected." });
            return;
        }

        // 向 db 服务发起问询
        dbClient.SendRequestEx(new PKG.Login_DB.Auth { username = a.username, password = a.password }, recv =>
        {
            // 如果等到 db 返回结果到达时 peer 已经断开, 则后续都不用继续做了
            if (!peer.alive) return;

            // rpc 超时
            if (recv == null)
            {
                peer.SendResponse(serial, new PKG.Generic.Error { number = -2, text = "dbClient Auth timeout." });
            }
            else
            {
                switch (recv)
                {
                    case PKG.Generic.Error o:
                        peer.SendResponse(serial, o);
                        break;
                    case PKG.DB_Login.Auth_Success o:
                        // todo: 通过 lobbyClient 继续 SendRequestEx( PKG.Login_Lobby.Enter ). 在收到 Lobby 返回的 EnterSuccess 之后 通过 peer 发送 lobby 生成的 token
                        peer.SendResponse(serial, new PKG.Generic.Success { });
                        break;
                    default:
                        peer.SendResponse(serial, new PKG.Generic.Error { number = -3, text = "dbClient Auth Result: unhandled package " + recv.ToString() });
                        break;
                }
            }
        });
    }