Example #1
0
        /// <summary>
        /// Handle received data, parse the message and pass it to the registered handlers.
        /// </summary>
        /// <param name="data">The received data.</param>
        /// <param name="recipient">The sender of the data.</param>
        async public void Handle(byte[] data, IRecipient sender)
        {
            // Check if the data contains at least the message type id.
            if (data.Length < sizeof(int))
            {
                return;
            }

            IPacket      packet = ParsePacket(data);
            IMessageType type   = TypeConfig.GetTypeById(packet.MessageType);

            if (type == null || type.Serializer == null)
            {
                return;
            }

            object obj = type.Serializer.Deserialize(packet.Payload);

            if (obj is IAcknowledgeRequest)
            {
                var message = (IAcknowledgeRequest)obj;

                await Send(sender, new AcknowledgeResponse(message.AckToken));
            }

            if (obj is IAcknowledgeResponse)
            {
                var response = (IAcknowledgeResponse)obj;

                _pendingAcknowledgeRequests.TryRemove(response.AckToken, out PendingAcknowledgeRequest removed);
            }

            type.Handler?.Handle(obj);
        }
        public WSATP_TO_OBATPAdapter(IMessageType message)
        {
            _adaptee = new WSATP_TO_OBATPAdaptee(message);
            WSATP_TO_OBATP WSATP_TO_OBATP = _adaptee.GetMessageType();

            AdaptData(WSATP_TO_OBATP);
        }
        protected override void ProcessElements(string[] additionalData)
        {
            base.ProcessElements(additionalData);

            var fieldSeparator = GetChildByPosition(FieldSeparatorChildPosition);

            if (fieldSeparator?.Children?.Count != 1) // has encoding, not field separator, so insert it
            {
                var genericField = new GenericField
                {
                    Parent      = this,
                    ParsingInfo = ParsingInfo,
                    Source      = ParsingInfo.FieldSeparator
                };
                Children.Insert(1, genericField);
            }

            // Set messageType
            var messageData = GetChildByPosition(MessageTypeChildPosition);

            if (messageData?.Children == null || !messageData.Children.Any())
            {
                return;
            }
            //TODO:ALM - remove?
            var messageType = new MessageType {
                GenericReferenceElement = messageData
            };

            MessageType = messageType;
        }
Example #4
0
 public void SetReceiver(IMessageType type, IMessageReceiver receiver)
 {
     lock (receiversLock)
     {
         receivers[type.TypeId] = receiver;
     }
 }
Example #5
0
 static void ExportAccountResultHandler(IEnumerable <object> items, IMessageType message)
 {
     Console.WriteLine($"Получен ответ для сообщения:{message.MessageGUID}");
     foreach (var item in items.OfType <exportAccountResultType>().Take(10))
     {
         Console.WriteLine(item.AccountGUID);
     }
 }
Example #6
0
 static void ExportHouseResultHandler(IEnumerable <object> items, IMessageType message)
 {
     Console.WriteLine($"Получен ответ для сообщения:{message.MessageGUID}");
     foreach (var item in items.OfType <exportHouseResultType>())
     {
         Console.WriteLine(item.HouseUniqueNumber);
     }
 }
Example #7
0
 /// <summary>
 /// Constructor with values
 /// </summary>
 /// <param name="file"></param>
 /// <param name="line"></param>
 /// <param name="plugin"></param>
 /// <param name="message"></param>
 /// <param name="type"></param>
 public AnalysisResult(string file, int line, string plugin, string message, IMessageType type)
 {
     File       = file;
     Line       = line;
     PluginName = plugin;
     Message    = message;
     Type       = type;
 }
Example #8
0
        public void OnComplite(IMessageType message)
        {
            BaseEventArgs args = new BaseEventArgs();

            if (CompliteEvent != null)
            {
                args.Message = message;
                CompliteEvent(this, args);
            }
        }
Example #9
0
 public Result Delete(IMessageType message)
 {
     try {
         var idx = _collection.FindIndex(x => x.MessageGUID == message.MessageGUID);
         _collection.RemoveAt(idx);
         return(new Result());
     }
     catch (ArgumentNullException) {
         return(new Result("В хранилище не найдено сообщение: " + message.MessageGUID));
     }
 }
Example #10
0
        public void ReceiveMessage(IMessageType type, byte[] content)
        {
            IMessageReceiver receiver;

            lock (receiversLock)
            {
                receiver = receivers[type.TypeId];
            }

            receiver.Receive(content);
        }
Example #11
0
        public void OnError(IMessageType message, IFault fault)
        {
            BaseEventArgs args = new BaseEventArgs();

            if (ErrorEvent != null)
            {
                args.Message     = message;
                args.ErrorCode   = fault.ErrorCode;
                args.Description = fault.ErrorMessage;
                ErrorEvent(this, args);
            }
        }
Example #12
0
        public Result Add(IMessageType message)
        {
            var idx = _collection.FindIndex(x => x.MessageGUID == message.MessageGUID);

            if (idx != -1)
            {
                return(new Result("В хранилище уже имеется сообщение: " + message.MessageGUID));
            }

            _collection.Add(message);
            return(new Result());
        }
        public void Send(ref IMessageType message)
        {
            try {
                var provider = _providerLocator[message.EndPoint];
                if (provider == null)
                {
                    throw new ArgumentOutOfRangeException($"Для конечной точки {Enum.GetName(typeof(EndPoints), message.EndPoint)} отсутсвует зарегистрированный провайдер");
                }

                // Отправить запрос
                var ack = provider.Send(message.Request);
                message.SendDate     = DateTime.Now;
                message.ResponceGUID = Guid.Parse(ack.MessageGUID);
                message.Status       = MessageStatuses.SendOk;
                SendCompliteEvent(message);
            }
            catch (System.ServiceModel.FaultException <IFault> ex) {
                // Выбрать поведение в зависимости от кода ошибки soap ГИС
                var    action       = _faultPolicy.GetAction(ex.Detail.ErrorCode);
                string errorMessage = ex.Detail.ErrorCode + " " + ex.Detail.ErrorMessage;

                switch (action)
                {
                case Polices.Actions.NeedException:
                    message.Status = MessageStatuses.SendCriticalError;
                    throw new Exception(ex.Message);

                case Polices.Actions.Abort:
                    message.Status = MessageStatuses.SendCriticalError;
                    break;

                case Polices.Actions.TryAgain:
                    message.Status = MessageStatuses.SendError;
                    break;

                default:
                    message.Status = MessageStatuses.SendCriticalError;
                    errorMessage   = $"Поведение для действия {Enum.GetName(typeof(Polices.Actions), action)} не реализовано";
                    break;
                }
                SendErrorEvent($"При отправке запроса в ГИС ЖКХ произошла ошибка {errorMessage}", message);
            }
            catch (TimeoutException) {
                message.Status = MessageStatuses.SendTimeout;
                SendErrorEvent("Запрос не отправлен, превышен интервал ожидания: ", message);
            }
            catch (Exception ex) {
                message.Status = MessageStatuses.SendCriticalError;

                SendErrorEvent("При отправке запроса произошло не обработанное исключение: " + ex.GetChainException(), message);
            }
        }
Example #14
0
        public DataStringMessage(IMessageType messageType, string data)
        {
            this.messageType = messageType;

            byte[] dataStringBytes = Encoding.UTF8.GetBytes(data);

            MemoryStream output = new MemoryStream();

            NetworkBinaryWriter writer = new NetworkBinaryWriter(output);

            writer.WriteUTF(data);

            content = output.ToArray();
        }
Example #15
0
        /// <summary>
        /// Sends an sms message
        /// </summary>
        /// <param name="message">An instance of SmsMessage representing the message to be sent</param>
        /// <returns>A string that can be parsed to json which provides server state of the sent message</returns>

        public override string Send(IMessageType message)
        {
            var smsMessage = (SmsMessage)message;
            //SendAsync(message)
            //    .RunSynchronously();

            String response = "";

            Task.Run(() =>
            {
                response = SendAsync(message).Result;
            }
                     ).Wait();

            return(response);
        }
Example #16
0
        public void Should_property_initialize_the_values()
        {
            var values = new
            {
                CorrelationId = Guid.NewGuid(),
                Name          = "Dru",
                Timestamp     = DateTime.UtcNow,
            };

            IMessageType message = TypeMetadataCache <IMessageType> .InitializeFromObject(values);


            message.CorrelationId.ShouldBe(values.CorrelationId);
            message.Name.ShouldBe(values.Name);
            message.Timestamp.ShouldBe(values.Timestamp);
        }
Example #17
0
        /// <summary>
        /// Create a packet from an object.
        /// </summary>
        /// <param name="obj">The object to send.</param>
        /// <typeparam name="T">The object type.</typeparam>
        /// <returns>The created packet.</returns>
        IPacket CreatePacketFromObject <T>(T obj)
        {
            IMessageType type = TypeConfig.GetType <T>();

            if (type == null || type.Serializer == null)
            {
                return(null);
            }

            byte[] payload = type.Serializer.Serialize(obj);

            if (payload == null)
            {
                return(null);
            }

            return(new Packet(type.Id, payload));
        }
Example #18
0
        static void Main(string[] args)
        {
            var msgList = CreateCollection(typeof(IMessageType));

            foreach (var item in msgList)
            {
                if (item.IsClass)
                {
                    IMessageType obj = (IMessageType)Activator.CreateInstance(item);

                    Console.WriteLine(obj.ShowName("dynamic"));
                }
            }



            Console.WriteLine("Press any key to continue....");
            Console.ReadKey();
        }
        private void ReadAndAppendToChatLog(IMessageType messageType)
        {
            if (messageType.GetType() != typeof(ChatMessage))
            {
                throw new ArgumentException("Unsupported message type");
            }
            var message = (ChatMessage)messageType;

            if (message.Type == ChatMessageType.Error)
            {
                throw new AggregateException(_interactiveLoginAdapter.GetCurrentOutput());
            }
            var currentOutput = _interactiveLoginAdapter.GetCurrentOutput();

            if (!string.IsNullOrEmpty(currentOutput))
            {
                ChatLog = string.Concat(ChatLog, Environment.NewLine, currentOutput);
            }
        }
Example #20
0
        public static IPipeline Get(IMessageType messageType)
        {
            switch (messageType)
            {
            case AdminMessageType adminMessageType:
                return(new AdminActivationPipeline());

            case CommandMessageType commandMessageType:
                return(new AdminCommandPipeLine());

            case WikiMessageType wikiMessageType:
                return(new WikiPipeline());

            case YoutubeMessageType youtubeMessageType:
                return(new YoutubePipeline());

            default:
                throw new NotImplementedException();
            }
        }
Example #21
0
        /// <summary>
        /// Asynchronously sends an sms message
        /// </summary>
        /// <param name="message">An instance of SmsMessage representing the message to be sent</param>
        /// <returns>A string that can be parsed to json which provides server state of the sent message</returns>
        public override async Task <string> SendAsync(IMessageType message)
        {
            var smsMessage = (SmsMessage)message;


            using (var httpClient = new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("Authorization", $"Basic {Credential.CredentialHash}");
                string content = JsonConvert.SerializeObject(new JsonSms
                {
                    to   = _ParseReceipients(smsMessage.Receipient),
                    text = smsMessage.Message,
                    from = smsMessage.Sender
                });

                var response = await httpClient.PostAsync(_apiUrl, new StringContent(content, Encoding.UTF8, "application/json"));

                return
                    (await response.Content.ReadAsStringAsync());
            }
        }
        public void GetResult(ref IMessageType message)
        {
            try {
                var provider = _providerLocator[message.EndPoint];
                if (provider == null)
                {
                    throw new ArgumentOutOfRangeException($"Для конечной точки {Enum.GetName(typeof(EndPoints), message.EndPoint)} отсутсвует зарегистрированный провайдер");
                }

                IAck ack = new Ack {
                    MessageGUID = message.ResponceGUID.ToString().ToLower()
                };

                IGetStateResult stateResult = new StateResult();

                foreach (var i in ATTEMS)
                {
                    OnAction(i.Item1);
                    if (provider.TryGetResult(ack, out stateResult))
                    {
                        message.CompliteDate = DateTime.Now;
                        message.Status       = MessageStatuses.GetResultOk;
                        message.Result       = stateResult;
                        GetResultCompliteEvent(message);
                        return;
                    }
                    Thread.Sleep(i.Item2 * 500);
                }
                message.Status = MessageStatuses.GetResultTimeout;
            }
            catch (System.ServiceModel.FaultException <IFault> ex) {
                var    action       = _faultPolicy.GetAction(ex.Detail.ErrorCode);
                string errorMessage = ex.Detail.ErrorCode + " " + ex.Detail.ErrorMessage;
                switch (action)
                {
                case Polices.Actions.NeedException:
                    message.Status = MessageStatuses.GetResultCriticalError;
                    throw new Exception($"При отправке запроса в ГИС ЖКХ произошла ошибка {errorMessage}");

                case Polices.Actions.Abort:
                    message.Status = MessageStatuses.GetResultCriticalError;
                    break;

                case Polices.Actions.TryAgain:
                    message.Status = MessageStatuses.GetResultError;
                    break;

                default:
                    message.Status = MessageStatuses.GetResultCriticalError;
                    errorMessage   = $"Поведение для действия {Enum.GetName(typeof(Polices.Actions), action)} не реализовано";
                    break;
                }
                GetResultErrorEvent($"При получении результата из ГИС ЖКХ произошла ошибка {errorMessage}", message);
            }
            catch (TimeoutException) {
                message.Status = MessageStatuses.GetResultTimeout;
                GetResultErrorEvent($"При получении результата из ГИС ЖКХ превышен интервал ожидания", message);
            }
            catch (Exception ex) {
                message.Status = MessageStatuses.SendCriticalError;
                GetResultErrorEvent("При получении результата произошло не обработанное исключение: " + ex.GetChainException(), message);
            }
        }
Example #23
0
 /// <summary>
 /// Register a message type for the server.
 /// </summary>
 /// <param name="messageType">The message type.</param>
 /// <typeparam name="T">The object type of the message.</typeparam>
 public void RegisterServerMessageType <T>(IMessageType messageType)
 => _serverMessageTypes[typeof(T)] = messageType;
Example #24
0
 /// <summary>
 /// Register a message type for the client.
 /// </summary>
 /// <param name="messageType">The message type.</param>
 /// <typeparam name="T">The object type of the message.</typeparam>
 public void RegisterClientMessageType <T>(IMessageType messageType)
 => _clientMessageTypes[typeof(T)] = messageType;
Example #25
0
 public EmptyMessage(IMessageType messageType)
 {
     this.messageType = messageType;
 }
Example #26
0
 public WSATP_TO_OBATPAdaptee(IMessageType WSATP_TO_OBATP)
 {
     m_messageType = (WSATP_TO_OBATP)WSATP_TO_OBATP;
 }
Example #27
0
 public Message(IMessageType msgType, Object[] data = null)
 {
     m_MsgType = msgType;
     m_Data = data;
 }
Example #28
0
 public RawMessage(IMessageType messageType, byte[] content)
 {
     this.messageType = messageType;
     this.content     = content;
 }
Example #29
0
 public Notification(IMessageType messageType)
 {
     _messageType = messageType;
 }
Example #30
0
            private void ClientReceiveProc(IAsyncResult iar)
            {
                try
                {
                    int receivedBytes = 0;

                    receivedBytes = m_clientSock.EndReceive(iar);


                    uint messageBase = BitConverter.ToUInt32(m_clientBufRecv, 0);


                    if (messageBase == 2)
                    {
                        uint   messageLength = BitConverter.ToUInt32(m_clientBufRecv, 4);
                        byte[] incomingBytes = new byte[messageLength];
                        Array.Copy(m_clientBufRecv, incomingBytes, messageLength);


                        uint messageID = BitConverter.ToUInt32(incomingBytes, 8);



                        if (messageID == (UInt32)Enums.Message.ID.WSATP_TO_OBATP)
                        {
                            Message message = new Message(incomingBytes);

                            MessageSelector messageSelector = new MessageSelector();
                            IMessageType    messageType     = messageSelector.GetMessageType((Enums.Message.ID)messageID);
                            IMessageType    dataorj         = messageType.CreateMessage(message.DATA);



                            WSATP_TO_OBATPAdapter adap = new WSATP_TO_OBATPAdapter(dataorj);
                        }
                    }



                    //if (messageID == (uint)Enums.Message.ID.OBATP_TO_WSATP)
                    //{
                    //    Message message = new Message(incomingBytes);
                    //}
                    //else if(messageID == (uint)Enums.Message.ID.WSATP_TO_OBATP)
                    //{
                    //    Message message = new Message(incomingBytes);

                    //    MessageSelector messageSelector = new MessageSelector();
                    //    IMessageType messageType = messageSelector.GetMessageType((Enums.Message.ID)messageID);



                    //}



                    if (!m_stopWatch.IsRunning)
                    {
                        m_stopWatch.Start();
                    }

                    m_stopWatch.Restart();


                    m_clientSock.BeginReceive(m_clientBufRecv, m_clientIndexRecv, m_clientLeftRecv, SocketFlags.None, new AsyncCallback(ClientReceiveProc), null);
                }
                catch (Exception e)
                {
                    if (m_clientSock != null)
                    {
                        m_clientSock.Close();
                        m_clientSock = null;
                    }
                    return;
                }
            }
 public void SetMessageReceiver(IMessageType messageType, IMessageReceiver receiver)
 {
     incomingMessagesRouter.SetReceiver(messageType, receiver);
 }