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; } } }
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; } }