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);
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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);
            }
        }