Пример #1
0
        private void WsClient_onVirtualAssistantConnectedAsync(WebSocketClient wsClient, CancellationToken ct)
        {
            List <UserInfo> waitedClient = new List <UserInfo>();

            _socket_client.Where(a => a._is_client == true && a._is_connected == false && a._is_busy == false && a._isOnLine == true).Select(a => {
                waitedClient.Add(new UserInfo {
                    name      = a.userInfo.name,
                    token     = a.userInfo.token,
                    is_online = a._isOnLine,
                    is_busy   = a._is_busy
                });
                return(a);
            }).ToList();
            WsClient_sendTextMessageAsync(wsClient, _jss.Serialize(new {
                status     = TaskType.WAITED_CLIENT,
                users_info = waitedClient,
                method     = "__on_load_waited_client"
            }), ct);
        }
Пример #2
0
 private int WsClient_onConnectedAsync(WebSocketClient wsClient, CancellationToken ct)
 {
     connection++;
     if (wsClient == null)
     {
         return(0);
     }
     if (_connected_user_info.Exists(e => e.token == wsClient._token))
     {
         SendTextMessageAsync(wsClient.socket, _jss.Serialize(new {
             status     = TaskType.CONNECTED,
             users_info = _connected_user_info.Where(a => a.token != wsClient._token).ToList(),
             method     = "__on_connected"
         }), ct);
         return(2);
     }
     _socket_client.Where(a => a._is_client == false && a._token != wsClient._token).DistinctBy(d => d._token).Select(a => {
         SendTextMessageAsync(a.socket, _jss.Serialize(new {
             connection_token = wsClient._token,
             status           = TaskType.CONNECTED,
             user_info        = wsClient.userInfo,
             method           = "__on_new_user_connected"
         }), ct);
         return(a);
     }).ToList();
     SendTextMessageAsync(wsClient.socket, _jss.Serialize(new {
         status     = TaskType.CONNECTED,
         users_info = _connected_user_info,
         method     = "__on_connected"
     }), ct);
     _connected_user_info.Add(new ConnectedUserInfo {
         name                 = wsClient.userInfo.name,
         token                = wsClient.userInfo.token,
         is_online            = wsClient._isOnLine,
         is_busy              = wsClient._is_busy,
         connection_token     = wsClient._connection_token,
         is_virtual_assistant = wsClient.userInfo.is_virtual_assistant
     });
     return(0);
 }
Пример #3
0
        private void WsClient_onClose(WebSocketClient wsClient, CancellationToken ct)
        {
            connection--;
            if (wsClient == null)
            {
                return;
            }
            int totalCon = _socket_client.Where(a => a._token == wsClient._token).ToList().Count;

            if (totalCon <= 1)
            {
                //a._connected_connection_token == cl._token
                //&& a._connection.Exists(c => c == a._token)
                if (wsClient._is_client)
                {
                    _socket_client.Where(a => a.userInfo.is_virtual_assistant == true && (a._connected_connection_token == wsClient._token || a._connection.Exists(c => c == wsClient._token))).Select(a => {
                        a._connected_connection_token = null;
                        if (a._connection.Exists(c => c == wsClient._token))
                        {
                            a._connection.Remove(wsClient._token);
                        }
                        a._is_connected = false;
                        SendTextMessageAsync(a.socket, _jss.Serialize(new {
                            connection_token = wsClient._token,
                            status           = TaskType.DISCONNECTED,
                            method           = "__on_client_disconnected"
                        }), ct);
                        return(a);
                    }).ToList();
                }
                else
                {
                    if (wsClient.userInfo.is_virtual_assistant)
                    {
                        _socket_client.Where(a => a._is_client == true && a._connected_connection_token == wsClient._token).Select(a => {
                            a._is_connected = false; a._connected_connection_token = null;
                            SendTextMessageAsync(a.socket, _jss.Serialize(new {
                                connection_token = wsClient._token,
                                status           = TaskType.DISCONNECTED,
                                method           = "__on_assistant_disconnected"
                            }), ct);
                            return(a);
                        }).ToList();
                    }
                    _socket_client.Where(a => a._is_client == false && a._token != wsClient._token).Select(a => {
                        if (a._connection.Exists(c => c == wsClient._token))
                        {
                            a._connection.Remove(wsClient._token);
                        }
                        SendTextMessageAsync(a.socket, _jss.Serialize(new {
                            connection_token = wsClient._token,
                            status           = TaskType.DISCONNECTED,
                            method           = "__on_user_disconnected"
                        }), ct);
                        return(a);
                    }).ToList();
                    var item = _connected_user_info.Find(x => x.token == wsClient._token);
                    if (item != null)
                    {
                        lock (__locker) {
                            _connected_user_info.Remove(item);
                        }
                    }
                }
            }
            lock (__locker) {
                _socket_client.Remove(wsClient);
            }
            return;
        }
Пример #4
0
        private void WsClient_onChangeStatus(WebSocketClient wsClient, TaskType taskType, CancellationToken ct)
        {
            string method = "";

            if (wsClient == null)
            {
                return;
            }
            if (taskType == TaskType.OFFLINE)
            {
                method = "offline";
            }
            else if (taskType == TaskType.ONLINE)
            {
                method = "online";
            }
            if (string.IsNullOrEmpty(method))
            {
                return;
            }

            if (wsClient._is_client)
            {
                _socket_client.Where(a => a.userInfo.is_virtual_assistant == true && (a._connected_connection_token == wsClient._token || a._connection.Exists(c => c == wsClient._token))).Select(a => {
                    a._connected_connection_token = null;
                    if (a._connection.Exists(c => c == wsClient._token))
                    {
                        a._connection.Remove(wsClient._token);
                    }
                    a._is_connected = false;
                    SendTextMessageAsync(a.socket, _jss.Serialize(new {
                        connection_token = wsClient._token,
                        status           = taskType,
                        method           = "__on_client_" + method
                    }), ct);
                    return(a);
                }).ToList();
                return;
            }
            if (wsClient.userInfo.is_virtual_assistant)
            {
                _socket_client.Where(a => a._is_client == true && a._connected_connection_token == wsClient._token).Select(a => {
                    a._connected_connection_token = null; a._connected_connection_token = null;
                    SendTextMessageAsync(a.socket, _jss.Serialize(new {
                        connection_token = wsClient._token,
                        status           = taskType,
                        method           = "__on_assistant_" + method
                    }), ct);
                    return(a);
                }).ToList();
            }
            _socket_client.Where(a => a._is_client == false && a._token != wsClient._token).Select(a => {
                if (a._connection.Exists(c => c == wsClient._token))
                {
                    a._connection.Remove(wsClient._token);
                }
                SendTextMessageAsync(a.socket, _jss.Serialize(new {
                    connection_token = wsClient._token,
                    status           = taskType,
                    method           = "__on_user_" + method
                }), ct);
                return(a);
            }).ToList();

            WsClient_sendTextMessageAsync(wsClient, _jss.Serialize(new {
                connection_token = wsClient._token,
                status           = taskType,
                method           = "__on_user_" + method
            }), ct);
        }