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); }
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); }
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; }
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); }