Beispiel #1
0
        private void ReceivedResponseSubscription(object sender, BasicDeliverEventArgs ea)
        {
            var response     = Encoding.UTF8.GetString(ea.Body);
            var deserialized = JsonConvert.DeserializeObject <CalculatePiResponse>(response);

            ReceivedResponse.Invoke(sender, new ResponseEventArgs(deserialized));
            Console.WriteLine("[ReceivedResponseSubscription] recived response {0}", response);
        }
Beispiel #2
0
 public void RaiseResponse(byte[] respData)
 {
     if (IsRespondable && respData != null)
     {
         Response = PacketIdToResponseObjectMapper[PacketId](this);
         Response.Deserialize(respData);
     }
     IsReceived = true;
     ReceivedResponse?.Invoke(this, Response);
 }
Beispiel #3
0
        private void OnLineReceived(string line)
        {
            string[] data = line.Split(' ');

            //begin with "@": treat as event message
            int eventId = 0;

            if (data.Length > 0 &&
                data[0].Length > 1 &&
                data[0][0] == '@' &&
                int.TryParse(data[0].Substring(1), out eventId)
                )
            {
                var args = new string[data.Length - 1];
                Array.Copy(data, 1, args, 0, args.Length);
                var eventMessage = new UArmEventMessage(eventId, args);
                ReceivedEvent?.Invoke(this, new UArmEventMessageEventArgs(eventMessage));

                return;
            }

            //begin with "$": treas as response
            int id = -1;

            if (data.Length > 1 &&
                data[0].Length > 1 &&
                data[0][0] == '$' &&
                int.TryParse(data[0].Substring(1), out id))
            {
                var args = new string[data.Length - 1];
                Array.Copy(data, 1, args, 0, args.Length);
                var response = new UArmResponse(id, args);

                //Terminate waiting process if pending exists
                if (_pendingCommandIds.ContainsKey(id))
                {
                    _responses[id] = response;
                    _pendingCommandIds[id].Cancel();
                }

                ReceivedResponse?.Invoke(this, new UArmResponseEventArgs(response));

                return;
            }


            //Unknown data
        }
        public void Update()
        {
            if (NetworkClient != null && NetworkClient.Status == NetPeerStatus.Running)
            {
                NetIncomingMessage msg;
                while ((msg = NetworkClient.ReadMessage()) != null)
                {
                    switch (msg.MessageType)
                    {
                    case NetIncomingMessageType.StatusChanged:
                    {
                        NetConnectionStatus status = (NetConnectionStatus)msg.ReadByte();

                        if (status == NetConnectionStatus.Connected)
                        {
                            NetOutgoingMessage outMsg = NetworkClient.CreateMessage();
                            outMsg.Write((byte)CommandType.GetChannelInfo);
                            outMsg.Write(channelInfos[currentChannel].channelId);

                            NetworkClient.SendMessage(outMsg, NetDeliveryMethod.ReliableOrdered, 0);
                        }
                        else if (status == NetConnectionStatus.Disconnected)
                        {
                            ChannelException?.Invoke(this, new Exception("Channel refused connection!"));
                            Abort();
                        }
                    };
                        break;

                    case NetIncomingMessageType.Data:
                    {
                        if ((CommandType)msg.ReadByte() == CommandType.GetChannelInfo)
                        {
                            ChannelInfo received = new ChannelInfo(msg);
                            if (received.channelId == -1)
                            {
                                ChannelException?.Invoke(this, new Exception($"Channel with ID {channelInfos[currentChannel].channelId} not found!"));
                                Abort();
                                return;
                            }
                            received.ip   = channelInfos[currentChannel].ip;
                            received.port = channelInfos[currentChannel].port;
                            ReceivedResponse?.Invoke(this, received);
                            if (channelInfos.Count - 1 > currentChannel)
                            {
                                currentChannel++;

                                NetOutgoingMessage outMsg = NetworkClient.CreateMessage();
                                outMsg.Write((byte)CommandType.GetChannelInfo);
                                outMsg.Write(channelInfos[currentChannel].channelId);

                                NetworkClient.SendMessage(outMsg, NetDeliveryMethod.ReliableOrdered, 0);
                            }
                            else
                            {
                                Abort();
                            }
                        }
                    };
                        break;

                    case NetIncomingMessageType.WarningMessage:
                        Misc.Logger.Warning(msg.ReadString());
                        break;

                    case NetIncomingMessageType.ErrorMessage:
                        Misc.Logger.Error(msg.ReadString());
                        break;

                    case NetIncomingMessageType.VerboseDebugMessage:
                    case NetIncomingMessageType.DebugMessage:
                        Misc.Logger.Info(msg.ReadString());
                        break;

                    default:
                        Console.WriteLine("Unhandled type: " + msg.MessageType);
                        break;
                    }
                }
            }
        }
Beispiel #5
0
 internal void OnReceivedResponse(RestClient client, RestCallData callData)
 {
     ReceivedResponse?.Invoke(client, new RestClientEventArgs(callData));
 }