public void Send(SendToConfigurationType type, T client, string[] ids, string command, object[] args = null) { if (client == null && (type == SendToConfigurationType.SpecifiedClient || type == SendToConfigurationType.Caller || type == SendToConfigurationType.Others)) { return; } if (type == SendToConfigurationType.All) { route.SendToAllClient(command, args); } else if (type == SendToConfigurationType.ExceptClients) { route.SendToAllClientsExcept(ids, command, args); } else if (type == SendToConfigurationType.SpecifiedClient) { route.SendToClient(client.ID, command, args); } else if (type == SendToConfigurationType.SpecifiedClients) { route.SendToClients(ids, command, args); } else if (type == SendToConfigurationType.Caller) { client.SendToCallerClient(command, args); } else if (type == SendToConfigurationType.Others) { client.SendToOtherClients(command, args); } }
protected void SendToClients(SendToConfigurationType type, string[] additionalData, string method, object[] args) { if (_sessions == null) { return; } string message = JsonConvert.SerializeObject(new WebSocketRPCPackage() { Target = method, Arguments = args ?? new object[0], IsInvocation = type == SendToConfigurationType.InvocationEvent, InvocationID = type == SendToConfigurationType.InvocationEvent ? method : null }); if (type == SendToConfigurationType.InvocationEvent) { type = SendToConfigurationType.SpecifiedClient; } if (type == SendToConfigurationType.All) { var sessions = _sessions.Sessions.ToList(); for (int i = 0; i < sessions.Count; i++) { sessions[i].Context.WebSocket.SendAsync(message, ar => { }); } } else if (type == SendToConfigurationType.ExceptClients) { if (additionalData == null) { additionalData = new string[] { } } ; var sessions = _sessions.Sessions.ToList(); for (int i = 0; i < sessions.Count; i++) { if (!additionalData.Contains(sessions[i].ID)) { sessions[i].Context.WebSocket.SendAsync(message, ar => { }); } } } else if (type == SendToConfigurationType.SpecifiedClient) { if (additionalData != null && additionalData.Length == 1) { if (_sessions.TryGetSession(additionalData[0], out var session)) { session.Context.WebSocket.SendAsync(message, ar => { }); } } } else if (type == SendToConfigurationType.SpecifiedClients) { if (additionalData != null && additionalData.Length > 0) { for (int i = 0; i < additionalData.Length; i++) { if (_sessions.TryGetSession(additionalData[i], out var session)) { session.Context.WebSocket.SendAsync(message, ar => { }); } } } } }