public HardwareTcpServer(int port) { this.tcpPort = port; State = TcpServerState.Offline; Messages = new Queue<TcpMessage>(); clients = new List<Thread>(); sockets = new List<Socket>(); worker = new BackgroundWorker(); worker.DoWork += new DoWorkEventHandler(worker_DoWork); worker.WorkerSupportsCancellation = true; }
static void server_OnServerState(TcpServerState state) { Console.WriteLine("TCP -> " + state); }
public int AcceptTcpClient(Socket socket) { socket.SendTimeout = 100; int clientId = sockets.Count; sockets.Add(socket); var client = new Thread(ClientThreadFunction); client.Start(clientId); clients.Add(client); State = TcpServerState.Connected; if (OnServerState != null) { OnServerState(State); } if (OnClientState != null) { OnClientState(clientId + 1, "connected"); } return clientId; }
void worker_DoWork(object sender, DoWorkEventArgs e) { var worker = (BackgroundWorker) sender; System.Net.Sockets.TcpListener listener = new TcpListener((int)e.Argument); listener.Start(); State = TcpServerState.Listening; if (OnServerState != null) { OnServerState(State); } while (!worker.CancellationPending) { while (!listener.Pending()) { Thread.Sleep(300); if (worker.CancellationPending) { listener.Stop(); State = TcpServerState.Free; if (OnServerState != null) { OnServerState(State); } return; } } AcceptTcpClient(listener.AcceptSocket()); } State = TcpServerState.Offline; if (OnServerState != null) { OnServerState(State); } listener.Stop(); }
private void TcpServerOnServerState(TcpServerState state) { try { Invoke(new Action<TcpServerState>(TcpServerChangeState), state); } catch (Exception e) { } }
protected void TcpServerChangeState(TcpServerState state) { if (state == TcpServerState.Connected) { lblTcpState.ForeColor = Color.Green; } if (state == TcpServerState.Listening || state == TcpServerState.Free) { lblTcpState.ForeColor = Color.Orange; } if (state == TcpServerState.Offline) { lblTcpState.ForeColor = Color.DarkRed; } lblTcpState.Text = state.ToString() + " " + Program.TcpServer.Port; }