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(); }
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; } } }); }