public override Task InvokeConnectionAsync(string connectionId, string methodName, object[] args) { var connection = _connections[connectionId]; var invocationAdapter = _registry.GetInvocationAdapter(connection.Metadata.Get <string>("formatType")); var message = new InvocationDescriptor { Method = methodName, Arguments = args }; return(invocationAdapter.WriteInvocationDescriptorAsync(message, connection.Channel.GetStream())); }
private Task InvokeAllWhere(string methodName, object[] args, Func <Connection, bool> include) { var tasks = new List <Task>(_connections.Count); var message = new InvocationDescriptor { Method = methodName, Arguments = args }; // TODO: serialize once per format by providing a different stream? foreach (var connection in _connections) { if (!include(connection)) { continue; } var invocationAdapter = _registry.GetInvocationAdapter(connection.Metadata.Get <string>("formatType")); tasks.Add(invocationAdapter.WriteInvocationDescriptorAsync(message, connection.Channel.GetStream())); } return(Task.WhenAll(tasks)); }
public Task WriteInvocationDescriptorAsync(InvocationDescriptor invocationDescriptor, Stream stream) { Write(invocationDescriptor, stream); return(Task.FromResult(0)); }