private async Task ReceiveFromServer() { while (!AppClosingToken.IsCancellationRequested) { try { NetworkStream stream = _server.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) { _bufferServer.Add(b); } else { byte[] data = _bufferServer.ToArray(); Message msg = CreateMessage(Encoding.UTF8.GetString(data)); ReceivedFromServer?.Invoke(msg); if (msg.Send) { await SendToClient(msg.ToString()); } _bufferServer = new List <byte>(); } } } catch { Stop(false); return; } } }
private void OnServerMessage(string message) { Message msg = CreateMessage(message); ReceivedFromServer?.Invoke(msg); if (msg.Send) { SendToClient(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; } }