internal void ReceiveRequestCompleted(IAsyncResult ar) { IPEndPoint masterEndPoint = null; byte[] frame; try { frame = _client.EndReceive(ar, ref masterEndPoint); } catch (ObjectDisposedException) { // this hapens when slave stops return; } ModbusUdpSlave slave = (ModbusUdpSlave)ar.AsyncState; _log.DebugFormat("Read Frame completed {0} bytes", frame.Length); _log.InfoFormat("RX: {0}", StringUtility.Join(", ", frame)); IModbusMessage request = ModbusMessageFactory.CreateModbusRequest(CollectionUtility.Slice(frame, 6, frame.Length - 6)); request.TransactionID = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(frame, 0)); // TODO refactor ModbusUdpTransport transport = new ModbusUdpTransport(); // perform action and build response IModbusMessage response = slave.ApplyRequest(request); response.TransactionID = request.TransactionID; // write response byte[] responseFrame = transport.BuildMessageFrame(response); _log.InfoFormat("TX: {0}", StringUtility.Join(", ", responseFrame)); _client.BeginSend(responseFrame, responseFrame.Length, masterEndPoint, WriteResponseCompleted, null); }
internal void ReceiveRequestCompleted(IAsyncResult ar) { IPEndPoint masterEndPoint = null; byte[] frame; try { frame = _client.EndReceive(ar, ref masterEndPoint); } catch (ObjectDisposedException) { // this hapens when slave stops return; } ModbusUdpSlave slave = (ModbusUdpSlave) ar.AsyncState; _log.DebugFormat("Read Frame completed {0} bytes", frame.Length); _log.InfoFormat("RX: {0}", StringUtility.Join(", ", frame)); IModbusMessage request = ModbusMessageFactory.CreateModbusRequest(CollectionUtility.Slice(frame, 6, frame.Length - 6)); request.TransactionID = (ushort) IPAddress.NetworkToHostOrder(BitConverter.ToInt16(frame, 0)); // TODO refactor ModbusUdpTransport transport = new ModbusUdpTransport(); // perform action and build response IModbusMessage response = slave.ApplyRequest(request); response.TransactionID = request.TransactionID; // write response byte[] responseFrame = transport.BuildMessageFrame(response); _log.InfoFormat("TX: {0}", StringUtility.Join(", ", responseFrame)); _client.BeginSend(responseFrame, responseFrame.Length, masterEndPoint, WriteResponseCompleted, null); }