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);
     }
 }
예제 #2
0
        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 => { });
                        }
                    }
                }
            }
        }