public void Run() { int inBufferCount; try { serialPort = Comm2IP.GetSerialPort(socket, comPort, baudRate); while (true) { inBufferCount = socket.Receive(inBuffer); if (inBufferCount == 0) break; serialPort.Send(inBuffer, inBufferCount); } } catch (Exception e) { log.Error(e); } finally { log.Info("Lost connection from: " + socket.RemoteEndPoint + " for: " + comPort + "@" + baudRate); Comm2IP.CloseSerialPort(serialPort); try { socket.Close(); } catch { } } }
public Socket(System.Net.Sockets.Socket socket, string comPort, int baudRate) { this.socket = socket; serialPort = null; this.comPort = comPort; this.baudRate = baudRate; }
public static void CloseSerialPort(SerialPort serialPort) { lock (ports) { if (serialPort != null) serialPort.SetSocket(null); } }
public static SerialPort GetSerialPort(System.Net.Sockets.Socket socket, string portName, int baudRate) { lock (ports) { SerialPort sp = null; string key = portName.ToUpper(); try { sp = ports[key]; if (sp.InUse()) throw new Exception("Port is already in use!"); sp.SetSocket(socket); } catch (KeyNotFoundException) { sp = new SerialPort(socket, portName, baudRate); sp.OpenPort(); ports.Add(key, sp); } return sp; } }