public Boolean notifyUser(String userName, String message) { String hash = HashArchive.getInstance().getHashByUserName(userName); if (hash != null) { WebSocketController.sendMessageToClient(hash, message); return(true); } LinkedList <String> CurrentPendingMessages; WebSocketController.PendingMessages.TryGetValue(userName, out CurrentPendingMessages); if (CurrentPendingMessages != null) { PMDB.Add(new Tuple <string, string>(userName, message)); CurrentPendingMessages.AddLast(message); } else { PMDB.Add(new Tuple <string, string>(userName, message)); CurrentPendingMessages = new LinkedList <String>(); CurrentPendingMessages.AddLast(message); WebSocketController.PendingMessages.Add(userName, CurrentPendingMessages); } return(false); }
private async Task Process(AspNetWebSocketContext context) { WebSocket socket = context.WebSocket; ArraySegment <byte> buffer = new ArraySegment <byte>(new byte[4096]); string hash = ""; if (context.CookieCollection[0].Name == "HashCode") { hash = context.CookieCollection[0].Value; } else if (context.CookieCollection.Count > 1 && context.CookieCollection[1].Name == "HashCode") { hash = context.CookieCollection[1].Value; } else { return; } updateSocket(hash, socket); if (socket.State == WebSocketState.Open) { User newConnectedUser = hashServices.getUserByHash(hash); LinkedList <String> CurrentPendingMessages; PendingMessages.TryGetValue(newConnectedUser.getUserName(), out CurrentPendingMessages); if (CurrentPendingMessages != null) { foreach (String message in CurrentPendingMessages) { sendMessageToClient(hash, message); } NotificationManager.getInstance().getPendingMessagesDB().Remove(new Tuple <string, string>(newConnectedUser.getUserName(), "")); CurrentPendingMessages.Clear(); } } while (socket.State == WebSocketState.Open) { WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None) .ConfigureAwait(false); String userMessage = Encoding.UTF8.GetString(buffer.Array, 0, result.Count); userMessage = "You sent: " + userMessage + " at " + DateTime.Now.ToLongTimeString() + " from ip " + context.UserHostAddress.ToString(); var sendbuffer = new ArraySegment <byte>(Encoding.UTF8.GetBytes(userMessage)); await socket.SendAsync(sendbuffer, WebSocketMessageType.Text, true, CancellationToken.None) .ConfigureAwait(false); } }
public static void addMessage(string hash, String message) { User newConnectedUser = hashServices.getUserByHash(hash); LinkedList <String> CurrentPendingMessages; PendingMessages.TryGetValue(newConnectedUser.getUserName(), out CurrentPendingMessages); if (CurrentPendingMessages == null) { NotificationManager.getInstance().getPendingMessagesDB().Add(new Tuple <string, string>(newConnectedUser.getUserName(), message)); CurrentPendingMessages = new LinkedList <String>(); CurrentPendingMessages.AddLast(message); PendingMessages.Add(newConnectedUser.getUserName(), CurrentPendingMessages); } else { NotificationManager.getInstance().getPendingMessagesDB().Add(new Tuple <string, string>(newConnectedUser.getUserName(), message)); CurrentPendingMessages.AddLast(message); } }