private void Server_MessageFromClient(object sender, MessageFromClientEventArgs e) { int clientId = e.ClientId; string msg = Encoding.Default.GetString(e.RawMessage); Log("Client " + e.ClientId.ToString() + ": " + msg); }
private async void ServOnOnMessageReceived(object?sender, MessageFromClientEventArgs e) { try { switch (e.Message.Type) { case NetworkOperation.Identifer: var id = Encoding.UTF8.GetString(e.Message.Data); LogMessage("Recived Id {Id}", id); if (_pendingOperations.TryGetValue(id, out var op)) { LogMessage("Id Accepted {Id}", id); op.EndpointId = e.Client; LogMessage("Bind {Id} To {Client}", id, e.Client); if (!_runningOperations.TryAdd(e.Client, op)) { SendDeny(e.Client); op.Dispose(); } else { var result = await BuildData(id, op); if (result == null) { SendDeny(e.Client); op.Dispose(); } else { LogMessage("Sending Data {Id}", id); var pool = ArrayPool <byte> .Shared; op.Sender = new Sender(result.Zip.Stream, e.Client, _dataServer.Value, () => pool.Rent(50_000), bytes => pool.Return(bytes, true), exception => LogMessage("Error on Processing Message \"{Message}\" {Id}", exception.Message, id)); op.Result = result; op.Sender.ProcessMessage(e.Message); } } _pendingOperations.TryRemove(id, out _); } else { LogMessage("No Operation Found {Id}", id); SendDeny(e.Client); } break; default: if (_runningOperations.TryGetValue(e.Client, out var running) && running.Sender != null && running.Result != null) { if (!running.Sender.ProcessMessage(e.Message)) { LogMessage("Transmission Compled {Client}", e.Client); running.Result.Compled(); running.Dispose(); } } else { SendDeny(e.Client); } break; } } catch (Exception exception) { LogMessage("Error on Processing Message {Error}", exception.Message); SendDeny(e.Client); } }