Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        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;
        }