void BroadcastLogin() { System.Threading.Tasks.Task.Factory.StartNew(() => { foreach (var v in lstUser) { var qmu = v.Value; var qc = TryConnectUser(qmu); if (qc != null) { var c = new QcChanel(); qmu.Chanel = c; c.SetChanel(qc, qc); c.ReceivedCmd += serverchanel_ReceivedCmd; qc.DisConnectedServer += (o, e) => { if (this.Loginout != null) { var evtarg = new QcMessagerLoginEventArg(qmu); qmu.Chanel = null; this.Loginout(this, evtarg); } }; } } }); }
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; } }
void server_ClientClosed(object sender, System.Net.Sockets.SocketAsyncEventArgs e) { if (this.Loginout != null) { foreach (var v in lstUser) { if (v.Value.Socket is QcClientService) { var socket = v.Value.Socket; if (socket != null) { var qcs = socket as QcClientService; if (qcs.ID == e.AcceptSocket.ToString()) { var evt = new QcMessagerLoginEventArg(v.Value); v.Value.Chanel = null; this.Loginout(this, evt); } } } } } }
void serverchanel_ReceivedCmd(object sender, QcCmdEventArgs e) { // 这是登录服务器,首次登陆,没有创建连接对象 if (lstUser.ContainsKey(e.Cmd.tokens(1)) == false) { return; } var userfrom = lstUser[e.Cmd.tokens(1)]; if (userfrom == null) { return; } switch (e.Cmd.CmdType) { case QcProtocol.QcCommand.QcMsg: if (this.ReciveMsg != null) { var msgevtarg = new QcMessagerMsgEventArg(e.Cmd.tokens(1), e.Cmd.tokens(3), e.Cmd.tokens(4)); this.ReciveMsg(this, msgevtarg); } break; case QcProtocol.QcCommand.QcLoginReplay: break; case QcProtocol.QcCommand.QcLoginOut: if (this.Loginout != null) { var evt = new QcMessagerLoginEventArg(userfrom); this.Loginout(this, evt); } userfrom.Close(); break; case QcProtocol.QcCommand.QcUserLogin: if (sender == serverchanel) { return; } if (userfrom.Name == User.Name) { return; } bool blLogined = false; if (e.Cmd.tokens(2) == User.Name) { blLogined = true; if (this.Logined != null) { var evtarg = new QcMessagerLoginEventArg(userfrom); this.Logined(this, evtarg); } } e.Chanel.Send(QcCmd.MakeCmd(QcProtocol.QcCommand.QcLoginReplay, blLogined)); break; } if (this.ReciveCmd != null) { var cmdevt = new QcMessagerCmdEventArg() { cmd = e.Cmd, user = userfrom }; this.ReciveCmd(this, cmdevt); } }