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); } }; } } }); }
public virtual void Start(ushort port, string ip = "") { foreach (var v in Users) { var qmu = new QcMsgUser(v); lstUser.TryAdd(qmu.Name, qmu); } server = new QcServer(port); server.Start(); server.ReceiveCmd += new QcNetEvent(server_ReceiveCmd); server.ClientClosed += new EventHandler <System.Net.Sockets.SocketAsyncEventArgs>(server_ClientClosed); serverchanel = new QcChanel(); serverchanel.SetChanel(null, server); serverchanel.ReceivedCmd += serverchanel_ReceivedCmd; BroadcastLogin(); }
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; } }