void c_Status(Nexus.Client c, Nexus.State state) { switch (state) { case Nexus.State.Disconnected: Remove(lvUsers, c); break; } }
private void SendNewUser(Nexus.Client client) { List<string> connected = new List<string>(); foreach (ListViewItem item in lvUsers.Items) if (((Nexus.Client)item.Tag).Channel == client.Channel) connected.Add(item.SubItems[0].Text); foreach (ListViewItem item in lvUsers.Items) if (((Nexus.Client)item.Tag).Channel == client.Channel && !(((Nexus.Client)item.Tag).Username == client.Username)) { ((Nexus.Client)item.Tag).Send(Nexus.Serialize(new object[] { (int)Nexus.Headers.NewUser, client.Username })); } }
private void Remove(ListView list, Nexus.Client c) { if (InvokeRequired) { Invoke(new RemoveDelegate(Remove), list, c); return; } foreach (ListViewItem item in list.Items) if (((Nexus.Client)item.Tag) == c) list.Items.Remove(item); SendUsers(c.Channel, new string[] {c.Username, "has disconnected."}); }
private void UpdateList(ListView list, object text, Nexus.Client c = null) { if (InvokeRequired) { Invoke(new UpdateListDelegate(UpdateList), list, text, c); return; } if (c != null) { ListViewItem LVI = new ListViewItem((string)text); LVI.Tag = c; list.Items.Add(LVI); } else { string[] shit = (string[])text; ListViewItem lvi = new ListViewItem(shit[0]); lvi.SubItems.Add(shit[1]); list.Items.Add(lvi); } }
void server_Incoming(Nexus.Client c, byte[] d) { try { object[] data = (object[])Nexus.Deserialize(d); switch ((int)data[0]) { case (int)Nexus.Headers.SendLogin: GetQuery("select * from users"); c.LoggedIn = CheckLogin(data[1].ToString().ToLower().Trim(), data[2].ToString()); if (c.LoggedIn) { c.Username = data[1].ToString(); c.Send(Nexus.Serialize(new object[] { (int)Nexus.Headers.LoginSuccess })); c.Status += c_Status; UpdateList(lvUsers, data[1].ToString(), c); c.Channel = (int)Nexus.Channels.Lounge; SendUsers(c.Channel); Thread.Sleep(10); //TODO: Fix that the right way. //c.Send(Nexus.Serialize(new object[] { (int)Nexus.Headers.NewUser, c.Username })); Invoke(new SendNewUserDelegate(SendNewUser), c); Thread.Sleep(10); c.Send(Nexus.Serialize(new object[] { (int)Nexus.Headers.Channels, GetChannels() })); if ((bool)MOTD[0]) c.Send(Nexus.Serialize(new object[] { 2, MOTD[1] })); } else { c.Send(Nexus.Serialize(new object[] { (int)Nexus.Headers.LoginFail })); } break; case (int)Nexus.Headers.Message: if (c.LoggedIn) { if (!(string.IsNullOrEmpty(data[1].ToString().Trim()))) { UpdateList(lvMessages, new string[] { c.Username, data[1].ToString() }); foreach (Nexus.Client client in server.Connections) if (client != c && client.Channel == c.Channel) client.Send(Nexus.Serialize(new object[] { 1, c.Username, data[1].ToString() })); } } break; case (int)Nexus.Headers.SendRegister: if (!CheckRegister(data[1].ToString()) && data[1].ToString().Length <= 24) { c.Send(Nexus.Serialize(new object[] { (int)Nexus.Headers.RegisterSuccess })); InsertUser(data[1].ToString(), data[2].ToString()); } else c.Send(Nexus.Serialize(new object[] { (int)Nexus.Headers.RegisterFail })); break; case (int)Nexus.Headers.Channels: c.Send(Nexus.Serialize(new object[] { (int)Nexus.Headers.Channels, GetChannels() })); break; case (int)Nexus.Headers.SelectChannel: int oldChannel = c.Channel; string chanName = Enum.GetName(typeof(Nexus.Channels), (int)data[1]).Replace("VB_NET", "VB.NET").Replace("CSharp", "C#"); c.Channel = (int)data[1]; SendUsers(c.Channel, new string[] { c.Username, "has joined this channel." }); SendUsers(oldChannel, new string[] { c.Username, "has moved to " + chanName }); break; } } catch (Exception ex) { MessageBox.Show(ex.ToString()); c.Disconnect(); /* Get the f**k out. */ } }