public void OnThreadExit(Client c) { lock (clients) { if (clients.Contains(c)) { clients.Remove(c); } } }
private void ListenerMain() { Invoke((Action)delegate { broadcastTimer.Start(); }); Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); listener.Bind(new IPEndPoint(new IPAddress(new byte[] { 0, 0, 0, 0 }), 5151)); listener.Listen(10); while (true) { Socket newSock = listener.Accept(); lock (banlist) { if (banlist.Any(x => x.Equals(((IPEndPoint)newSock.RemoteEndPoint).Address))) { newSock.Close(); continue; } } Client c = new Client(this, newSock, log); lock (clients) { clients.Add(c); } c.Thread.Start(); } }
public void BroadcastMessage(HaProtoImpl.Opcode type, HaProtoImpl.HaProtoPacket packet, Client exempt = null) { byte[] data = packet.Build(); lock (clients) { for (int i = 0; i < clients.Count; i++) { Client c = clients[i]; if (c == exempt) continue; HaProtoImpl.Send(c.Socket, type, data); } } }