using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace SocketsSample.Hubs
{
public class Hub
{
public IHubConnectionContext Clients { get; set; }
}
public interface IHubConnectionContext
{
IClientProxy All { get; }
IClientProxy Client(string connectionId);
}
public class HubConnectionContext : IHubConnectionContext
{
private readonly HubEndpoint _endPoint;
public HubConnectionContext(string hubName, HubEndpoint endpoint)
{
_endPoint = endpoint;
All = new HubClientProxy(endpoint, hubName);
}
public IClientProxy All { get; }
public IClientProxy Client(string connectionId)
{
return new HubClientProxy(_endPoint, connectionId);
}
}
public class HubClientProxy : IClientProxy
{
private readonly HubEndpoint _endPoint;
private readonly string _key;
public HubClientProxy(HubEndpoint endPoint, string key)
{
_endPoint = endPoint;
_key = key;
}
public Task Invoke(string method, params object[] args)
{
return _endPoint.Invoke(_key, method, args);
}
}
public interface IClientProxy
{
///
/// Invokes a method on the connection(s) represented by the instance.
///
/// name of the method to invoke
/// argumetns to pass to the client
/// A task that represents when the data has been sent to the client.
Task Invoke(string method, params object[] args);
}
}