private void DoConnectionLost(ConnectionLostEventArgument argument, data sender) { var rest = new List <PrimaryMessage>(); DoConnectionLost(argument); if (argument.Retry) { rest.AddRange(sender.messages); } Connections.Remove(sender.con); if (argument.Retry) { if (Manager != null && Manager.DefaultLogin is LoginClient2) { var lc = Manager.DefaultLogin as LoginClient2; lc.Connect(sender.con.Target); } } if (Manager != null) { var user = Manager.Users.Users.Find((u) => u.DefaultConnector == base.ConnectorId); if (user != null) { user.Ping = -1; if (argument.UserLogout) { Manager.Users.RemoveUser(user); if (UserLogedOut != null) { UserLogedOut(new LogoutUser(user, this, argument)); } } } } }
private void DoConnectionLost(ConnectionLostEventArgument argument, data sender) { var rest = new List <PrimaryMessage>(); DoConnectionLost(argument); if (argument.Retry) { while (sender.messages.Count > 0) { rest.Add(sender.messages.Dequeue()); } } ConnectionRemoved(sender.con); //if (argument.Retry) //{ // ConnectionAdded(sender.con); // var d = datas.Find((dt) => dt.con == sender.con); // if (argument.SendedMessage != null&&argument.SendedMessage is PrimaryMessage) // d.messages.Enqueue(argument.SendedMessage as PrimaryMessage); // for (int i = 0; i < rest.Count; ++i) d.messages.Enqueue(rest[i]); //} if (Manager != null) { var user = Manager.Users.Users.Find((u) => u.DefaultConnector == base.ConnectorId); if (user != null) { user.Ping = -1; if (argument.UserLogout) { Manager.Users.RemoveUser(user); if (UserLogedOut != null) { var lu = new LogoutUser(user, this, argument); UserLogedOut(lu); } } } } }
void doCont() { using (var stream = tcp.GetStream()) while (active) { if (!tcp.Connected) { cl = new ConnectionLostEventArgument(datatr, con, null); return; } DoPing(); while (tcp.Available > 0) { var data = ConnectionHelper.Receive2(stream); try { var mes = new PrimaryMessage(); mes.Load(data); mes.MessageRoot.Connection = con; mes.MessageRoot.Connector = connector; mes.MessageRoot.RemoteId = id; var task = new Task(() => Manager.ReceiveMessage(mes)); task.Start(); } catch { if (tcp.Connected) { continue; } else { cl = new ConnectionLostEventArgument(datatr, con, null); return; } } } while (messages.Count > 0) { var mes = messages.Dequeue(); if (mes == null) { continue; } if (!tcp.Connected) { cl = new ConnectionLostEventArgument(datatr, con, mes); return; } mes.SenderID = Manager.CurrentId.Id; try { ConnectionHelper.Send2(stream, mes); } catch { cl = new ConnectionLostEventArgument(datatr, con, mes); return; } } if (active) { if (!tcp.Connected) { cl = new ConnectionLostEventArgument(datatr, con, null); return; } Thread.Sleep(10); } } }
public LogoutUser(User user, Connector connector, ConnectionLostEventArgument argument) { User = user; Connector = connector; Argument = argument; }
void doConct(TcpClient tcp) { using (var stream = tcp.GetStream()) while (active) { if (!tcp.Connected) { cl = new ConnectionLostEventArgument(datatr, con, null); return; } DoPing(); while (tcp.Available > 0) { var l = new List <byte>(); var b = new byte[tcp.ReceiveBufferSize]; int len; while (true) { len = stream.Read(b, 0, b.Length); l.AddRange(b.ToList().GetRange(0, len).ToArray()); if (len < b.Length) { break; } } try { var mes = new PrimaryMessage(); mes.Load(l.ToArray()); mes.MessageRoot.Connection = con; mes.MessageRoot.Connector = connector; mes.MessageRoot.RemoteId = id; Manager.ReceiveMessage(mes); } catch { if (tcp.Connected) { continue; } else { cl = new ConnectionLostEventArgument(datatr, con, null); return; } } } while (messages.Count > 0) { var mes = messages.Dequeue(); if (mes == null) { continue; } if (!tcp.Connected) { cl = new ConnectionLostEventArgument(datatr, con, mes); return; } mes.SenderID = Manager.CurrentId.Id; var b = mes.Save(); try { stream.Write(b, 0, b.Length); } catch { cl = new ConnectionLostEventArgument(datatr, con, mes); return; } } if (active) { if (!tcp.Connected) { cl = new ConnectionLostEventArgument(datatr, con, null); return; } Thread.Sleep(10); } } }