Exemple #1
0
        /// <summary>
        /// Отправляет пакет в ВИАВ
        /// </summary>
        public void Send(string paramName, string paramValue)
        {
            string data = "{\"h\":{\"s\":\"INS\",\"d\":\"VIT\",\"t\":0},\"p\":{" + "\"" + paramName + "\":" + paramValue + "}}";

            Byte[] outputPackage = System.Text.Encoding.ASCII.GetBytes(data);
            sender.Send(outputPackage);
        }
        /*
         * private void TransmittionComplete(IAsyncResult result)
         * {
         *       transceiver.Dispose();
         * }
         */
        /// <summary>
        /// Осуществляет обмен коммуникатора с удаленным узлом в режиме подчиненного узла
        /// </summary>
        private void ListenNetworkSlave()
        {
            while (state == CommunicatorState.active)
            {
                //Получаем датаграмму
                UDPDatagram currentDatagram = transceiver.ReceiveDatagram();

                //Console.WriteLine("{0} : Package of type {1} received.", DateTime.Now, currentDatagramm.PackageType);
                //Если пришел информационный пакет и включен режим приемопередатчика или приемника
                if (currentDatagram.PackageType == PackageTypes.Info &&
                    (communicationMode == CommunicationMode.Transceiver || communicationMode == CommunicationMode.Receiver))
                {
                    ParseInfoPackage(currentDatagram);
                }
                // Если принятый пакет - это признак готовности главной машины к приему (Ready) и включен режим приемопередатчика или передатчика
                else if (currentDatagram.PackageType == PackageTypes.Ready &&
                         (communicationMode == CommunicationMode.Transceiver || communicationMode == CommunicationMode.Transmitter))
                {
                    //InitializeTransmitter();
                    UDPDatagram SendDatagram = CreateInfoPackage();
                    transceiver.Send(SendDatagram);
                    //delTransmitter TransmitterDelegate = new delTransmitter(transmitter.Send);
                    //AsyncCallback TransmitterCallBack = new AsyncCallback(TransmittionComplete);
                    //TransmitterDelegate.BeginInvoke(SendDatagram, TransmitterCallBack, null);
                }
                if (InputParametersNumber != 0 && hasInputParameterChanged)
                {
                    OnDataReceived(EventArgs.Empty);                     // получены новые данные
                    hasInputParameterChanged = false;
                }

                if (OutputParametersNumber != 0)                 // && currentDatagram.PackageType == PackageTypes.SendData
                {
                    foreach (Parameter Item in Parameters)
                    {
                        if ((Item.Direction == ParameterDirection.output || Item.Direction == ParameterDirection.inpout) && Item.Value != null)
                        {
                            OnDataSent(new ParameterInfoEventArgs(Item));                             // отправлены данные
                        }
                    }
                }

                OnDataExchange(EventArgs.Empty);                 // произошел цикл обмена
            }
        }