Example #1
0
        /// <summary>
        /// Обработчик входящих сообщений из сети
        /// </summary>
        /// <param name="message">Входящее сообщение для обработки</param>
        //private void HandleIncomingMessages(Frame message)
        public override void HandleIncomingMessages(Frame[] messages)
        {
            String msg;
            IncomingMessageStuctureBootUp msghelper;
            DeviceBase device;

            if (Status != Status.Running)
            {
                return;
            }

            foreach (Frame message in messages)
            {
                msghelper = IncomingMessageStuctureBootUp.Parse(message);

                if (!msghelper.IsForService)
                {
                    continue;
                }

                if (msghelper.HasIncorrectStructure)
                {
                    //!!!Warning: Длина данных в поле данных корректна, но содержание неверно
                    // (message.Data[0] == 0x84) || (message.Data[0] == 0x04) ||
                    // (message.Data[0] == 0x85) || (message.Data[0] == 0x05) ||
                    // (message.Data[0] == 0xFF) || (message.Data[0] == 0x7F))
                    // Эти коды используются в протоколе NodeGuard.
                    continue;
                }

                // Сообщение для этого сервиса.
                //msg = String.Format("Network {0}: Сервис {1}: Service BootUp принял сообщение: {2}",
                //    base.NetworkController.NetworkName(), this.ServiceName, message.ToString());
                //_Logger.Trace(msg);

                //Ищем устройство которое прислало сообщение
                if (!_NetworkController.Devices.Contains(msghelper.CobeId))
                {
                    // Устройство не найдено
                    msg = String.Format(
                        "Network {0}: Пришло сообщение от устройства с NodeId {1}, " +
                        "данное устройство не зарегистрировано в сети. Message - {2}",
                        this.NetworkController.Description, msghelper.CobeId, message.ToString());
                    //Logger.Error(msg);
                    continue;
                }

                // Устройство найдено.
                // Устанавливаем новый статус устройству
                device = _NetworkController.Devices[msghelper.CobeId];

                lock (_SyncRoot)
                {
                    device.Status = DeviceStatus.Preoperational;
                }
                // Пишем в журнал... Не реализовано
            }
        }
Example #2
0
            /// <summary>
            /// Разбирает ответное сообщение
            /// </summary>
            /// <param name="message">Ответное сообщение</param>
            /// <returns>Структура данных ответа</returns>
            internal static IncomingMessageStuctureBootUp Parse(Frame message)
            {
                const Byte MASK_COBEID = 0x7F; // Выделяет 7 бит содержащих CodeId из поля Id
                IncomingMessageStuctureBootUp frame =
                    new IncomingMessageStuctureBootUp();

                frame.Answer = message;
                frame.CobeId = (Byte)(((Byte)message.Identifier) & MASK_COBEID);
                frame.DL     = message.Data.Length;
                return(frame);
            }
Example #3
0
 /// <summary>
 /// Разбирает ответное сообщение
 /// </summary>
 /// <param name="message">Ответное сообщение</param>
 /// <returns>Структура данных ответа</returns>
 internal static IncomingMessageStuctureBootUp Parse(Frame message)
 {
     const Byte MASK_COBEID = 0x7F; // Выделяет 7 бит содержащих CodeId из поля Id 
     IncomingMessageStuctureBootUp frame = 
         new IncomingMessageStuctureBootUp();
     frame.Answer = message;
     frame.CobeId = (Byte)(((Byte)message.Identifier) & MASK_COBEID);
     frame.DL = message.Data.Length;
     return frame;
 }