Ejemplo n.º 1
0
        private async Task ReceiveFromClient()
        {
            while (!AppClosingToken.IsCancellationRequested)
            {
                try
                {
                    NetworkStream stream = _client.GetStream();

                    if (_shouldConnect || !stream.CanRead)
                    {
                        continue;
                    }

                    int    read;
                    byte[] buffer = new byte[MaxBufferSize];

                    if ((read = await stream.ReadAsync(buffer, 0, MaxBufferSize)) == 0)
                    {
                        Stop(false);
                        return;
                    }

                    int i = 0;
                    while (--read >= 0)
                    {
                        byte b = buffer[i++];
                        if (b != 0x00)
                        {
                            _bufferClient.Add(b);
                        }
                        else
                        {
                            byte[] data = _bufferClient.ToArray();

                            Message msg = CreateMessage(Encoding.UTF8.GetString(data));

                            ReceivedFromClient?.Invoke(msg);

                            if (msg.Send)
                            {
                                await SendToServer(msg.ToString());
                            }

                            _bufferClient = new List <byte>();
                        }
                    }
                }
                catch
                {
                    Stop(false);
                    return;
                }
            }
        }
Ejemplo n.º 2
0
        private void OnClientMessage(string message)
        {
            Message msg = CreateMessage(message);

            ReceivedFromClient?.Invoke(msg);

            if (msg.Send)
            {
                SendToServer(msg.ToString());
            }
        }
        void INotificationHandler.HandleResponse(IQueryClient queryClient, string responseText)
        {
            CommandParameterGroupList parameterGroupList = CommandParameterGroupList.Parse(responseText);

            MessageTarget messageTarget = (MessageTarget)parameterGroupList.GetParameterValue <uint>("targetmode");

            switch (messageTarget)
            {
            case MessageTarget.Client:
                ReceivedFromClient?.Invoke(queryClient, new MessageReceivedEventArgs(parameterGroupList));
                break;

            case MessageTarget.Channel:
                ReceivedFromChannel?.Invoke(queryClient, new MessageReceivedEventArgs(parameterGroupList));
                break;

            case MessageTarget.Server:
                ReceivedFromServer?.Invoke(queryClient, new MessageReceivedEventArgs(parameterGroupList));
                break;
            }
        }