void server_ReceiveCmd(object sender, QcCmdEventArgs e) { QcCmd cmd = e.Cmd; string from = e.Cmd.tokens(1); switch (cmd.CmdType) { case QcProtocol.QcCommand.QcUserLogin: bool blLogined = false; if (cmd.tokens(2) == User.Name) { blLogined = true; QcChanel chanel = new QcChanel(); chanel.SetChanel(e.Chanel, server); if (lstUser.ContainsKey(from)) { lstUser[from].Chanel = chanel; if (this.Logined != null) { var userfrom = lstUser[from]; var evtarg = new QcMessagerLoginEventArg(userfrom); this.Logined(this, evtarg); } } } QcClientService qcs = e.Chanel as QcClientService; e.Chanel.Send(QcCmd.MakeCmd(QcProtocol.QcCommand.QcLoginReplay, blLogined)); if (blLogined && from != User.Name) { e.Chanel.Send(QcCmd.MakeCmd(QcProtocol.QcCommand.QcUserLogin, User.Name, from)); } break; } }
QcClient TryConnectIp(string ip, ushort port, string name) { if (ip == "") { return(null); } Ping myPing; myPing = new Ping(); AutoResetEvent are = new AutoResetEvent(false); bool pingsuccess = false; myPing.PingCompleted += (o, e) => { are.Set(); pingsuccess = (e.Reply.Status == IPStatus.Success); }; string pingIP = ip.ToString(); try { myPing.SendAsync(pingIP, 100, null); } catch { return(null); } are.WaitOne(100);//等待ping完成 if (pingsuccess == true) // if (myPing.Send(pingIP, 10000).Status == IPStatus.Success) { QcClient client = new QcClient(); AutoResetEvent msgresetevt = new AutoResetEvent(false); client.ConnectedServer += (o, e) => { msgresetevt.Set(); }; client.Connect(ip, port); if (msgresetevt.WaitOne(1000)) { bool logined = false; client.ReceiveCmd += (o, e) => { QcCmd cmd = e.Cmd; switch (cmd.CmdType) { case QcProtocol.QcCommand.QcLoginReplay: if (cmd.tokens(1) == "True") { logined = true; } ; break; default: break; } msgresetevt.Set(); }; client.Send(QcCmd.MakeCmd(QcProtocol.QcCommand.QcUserLogin, User.Name, name)); if (msgresetevt.WaitOne(100)) { if (logined) { return(client); } } client.Close(); } } //失败返回null return(null); }