/// <summary> /// Starts the communication channel. /// </summary> public override void Start() { // close connections in case of restart masterConn?.Close(); slaveConn?.Close(); if (Behavior == ChannelBehavior.Master) { masterConn = new UdpConnection(Log, new UdpClient(options.LocalUdpPort), options.RemoteUdpPort); slaveConn = null; } else { masterConn = new UdpConnection(Log, new UdpClient(), options.RemoteUdpPort); // auto assign local port slaveConn = new UdpConnection(Log, new UdpClient(options.LocalUdpPort), options.RemoteUdpPort); Log.WriteAction(Locale.IsRussian ? "Локальный UDP-порт {0} открыт" : "Local UDP port {0} is open", options.LocalUdpPort); Log.WriteAction(Locale.IsRussian ? "Запуск приёма данных по UDP на порту {0}" : "Start receiving data via UDP on port {0}", options.LocalUdpPort); terminated = false; slaveConn.BeginReceive(UdpReceiveCallback); } SetDeviceConnection(masterConn); }
protected volatile bool terminated; // necessary to stop receiving data /// <summary> /// Initializes a new instance of the class. /// </summary> public UdpChannelLogic(ILineContext lineContext, ChannelConfig channelConfig) : base(lineContext, channelConfig) { options = new UdpChannelOptions(channelConfig.CustomOptions); requestArgs = new IncomingRequestArgs(); deviceLock = new object(); masterConn = null; slaveConn = null; deviceDict = null; terminated = false; }