/// <summary> /// Отправка фрейма данных /// </summary> /// <param name="command"></param> /// <param name="messageBody"></param> protected void SendFrame(TrackerCommand command, string messageBody) { TrackerFrame frame = null; try { frame = CreateFrame(command, messageBody); Logger.InfoFormat("Отправка фрейма {0}", frame.ToString()); TcpClient.Client.Send(frame.BlockData); } catch (Exception ex) { Logger.Error(String.Format("Ошибка при отправке фрейма {0}", frame == null ? "(фрейм не создан)" : frame.ToString()), ex); } }
/// <summary> /// Получение фрейма /// </summary> /// <param name="frame">фрейм</param> protected void OnReceiveFrame(TrackerFrame frame) { Logger.DebugFormat("Получен фрейм {0}, команда {1}", frame.ToString(), frame.Command.CommandType.Description); // Проверка CheckHandshake(frame); // Если обработчик ответа не указан то выходим if (String.IsNullOrEmpty(frame.Command.CommandType.AnswerHandlerFunction)) { return; } // Имем обработчик var handler = GetType().GetMethod(frame.Command.CommandType.AnswerHandlerFunction); if (handler == null) { throw new Exception(String.Format("Функция обработки ответа не найдена: {0}", frame.Command.CommandType.AnswerHandlerFunction)); } // Вызов обработчика handler.Invoke(this, new object[] { frame }); }