Beispiel #1
0
        public SendResponseType Send(string clientId, string message)
        {
            SendResponseType result = SendResponseType.SessionNotFound;
            var Sockets             = clientsWS.Where(ws => GetClientKey((WSHandler)ws) == clientId);

            foreach (WSHandler socket in Sockets)
            {
                if (socket.WebSocketContext.IsClientConnected)
                {
                    socket.Send(message);
                    LogDebug($"Send - Message sent to client '{clientId}'");
                    result = SendResponseType.OK;
                }
                else
                {
                    LogError($"Send - Web Socket connection has been closed. Could not send message '{clientId}'");
                    result = SendResponseType.SessionInvalid;
                }
            }

            if (result == SendResponseType.SessionNotFound)
            {
                LogError(String.Format("Send - WebSocket Session Id: '{0}' was not found", clientId));
            }
            return(result);
        }
Beispiel #2
0
 public override void OnMessage(string Message)
 {
     _Clients.Where(w => w != this && ((BroadcastWebSocketHandler)w).Group == this.Group).ToCollection().Broadcast(Newtonsoft.Json.JsonConvert.SerializeObject(new
     {
         //user = this._Username,
         time    = string.Format("{0}", DateTime.Now.ToShortTimeString()),
         message = Message
     }));
 }
Beispiel #3
0
        /// <summary>
        /// Closes any WebSocket connections for a give userID
        /// </summary>
        /// <param name="userID">The userID to close connections for</param>
        private void closeWsConnections(string userID)
        {
            WebSocketCollection wsClients = (WebSocketCollection)HttpContext.Current.Application["WSClients"];

            List <WebSocketHandler> filtered = wsClients.Where(r => ((GameAccessWebSocketHandler)r).userID == userID).ToList();

            foreach (WebSocketHandler h in filtered)
            {
                h.Close();
            }
        }
        public static void SendTrashCanStaus(string deviceId)
        {
            var clients = Clients.Where(c => ((TrashWebSocketHandler)c).DeviceId == deviceId);

            foreach (var c in clients)
            {
                var data = Task.Run(() => DocumentDbRepository <TrashCan> .GetItemAsync(deviceId)).Result;

                if (data != null)
                {
                    ((TrashWebSocketHandler)c).Send(JsonConvert.SerializeObject(data.LatestReading));
                }
            }
        }
        public override void OnMessage(string message)
        {
            try
            {
                var decoded = new WebsocketChatMessage();

                // Try to decode message
                try
                {
                    decoded = JsonConvert.DeserializeObject <WebsocketChatMessage>(message);
                }
                catch (Exception e)
                {
                    Send(JsonConvert.SerializeObject(new ErrorMessage()
                    {
                        Error = "Json Invalide - " + e.Message
                    }));
                    return;
                }

                if (decoded.IsValid())
                {
                    // Update token
                    if (_playerToken == null)
                    {
                        _playerToken = new UserToken();
                    }

                    if (string.IsNullOrWhiteSpace(_playerToken.UserId))
                    {
                        try
                        {
                            _playerToken = JwtHelper.DecodeToken(decoded.UserToken);
                        }
                        catch (Exception)
                        {
                            Send(JsonConvert.SerializeObject(new ErrorMessage()
                            {
                                Error = "Token Usager Invalide"
                            }));
                            return;
                        }
                    }

                    #region Friend chat canal
                    // add client to player list
                    if (!ClientIds.ContainsKey(_playerToken.UserId))
                    {
                        ClientIds.Add(_playerToken.UserId, this);
                    }

                    // Information to create a new canal with specified user
                    if (!string.IsNullOrWhiteSpace(decoded.TargetUserHashId) && !string.IsNullOrWhiteSpace(decoded.TargetUserName))
                    {
                        // User is connected
                        if (ClientIds.ContainsKey(decoded.TargetUserHashId))
                        {
                            var otherPlayer = ClientIds[decoded.TargetUserHashId];

                            // create new chat with both users
                            var hashId = Sha1Hash.DoubleSha1Hash(BigInteger.Parse(_playerToken.UserId),
                                                                 BigInteger.Parse(decoded.TargetUserHashId));

                            if (!otherPlayer.MyCanalList.Contains(hashId))
                            {
                                otherPlayer.MyCanalList.Add(hashId);
                                otherPlayer.Send(JsonConvert.SerializeObject(new WebsocketChatMessage()
                                {
                                    CanalId   = hashId,
                                    CanalName = _playerToken.Username
                                }));
                            }

                            if (!MyCanalList.Contains(hashId))
                            {// Add canal to canal list
                                MyCanalList.Add(hashId);
                                // send to players
                                Send(JsonConvert.SerializeObject(new WebsocketChatMessage()
                                {
                                    CanalId   = hashId,
                                    CanalName = decoded.TargetUserName
                                }));
                            }
                            else
                            {
                                Send(
                                    JsonConvert.SerializeObject(new ErrorMessage()
                                {
                                    Error = "Vous êtes déjà dans le chat avec cet usager."
                                }));
                            }
                        }
                        else
                        {
                            Send(
                                JsonConvert.SerializeObject(new ErrorMessage()
                            {
                                Error = "Le joueur que vous essayez de contecter n'est pas en ligne."
                            }));
                        }
                        return;
                    }
                    #endregion

                    #region create public canal
                    // Information to create/join a new chat canal
                    var chatName = decoded.CanalName;
                    if (!string.IsNullOrWhiteSpace(chatName))
                    {
                        var hashId = Sha1Hash.GetSha1HashData(chatName);
                        if (!MyCanalList.Contains(hashId))
                        {
                            // Add canal to canal list
                            MyCanalList.Add(hashId);
                        }
                        Send(JsonConvert.SerializeObject(new WebsocketChatMessage()
                        {
                            CanalId   = hashId,
                            CanalName = chatName
                        }));
                        return;
                    }
                    #endregion

                    #region send message in canal
                    // Information to send a message to a chat canal
                    var chatId         = decoded.CanalId;
                    var messageContent = decoded.Message;
                    if (!string.IsNullOrWhiteSpace(chatId) && !string.IsNullOrWhiteSpace(messageContent))
                    {
                        if (messageContent.Length > 255)
                        {
                            Send(JsonConvert.SerializeObject(new ErrorMessage()
                            {
                                Error = "Chat trop long"
                            }));
                            return;
                        }

                        messageContent = ReplaceBadWords(messageContent);

                        var clients = Clients.Where(x => ((ChatWebsocket)x).MyCanalList.Contains(chatId)).ToList();
                        if (clients != null && clients.Count > 0)
                        {
                            if (clients.Count == 1)
                            {
                                clients[0].Send(JsonConvert.SerializeObject(new WebsocketChatMessage()
                                {
                                    Message =
                                        _playerToken.Username + " @ " +
                                        TimeHelper.CurrentCanadaTimeString() +
                                        " : (Vous êtes le seul dans ce canal) " + messageContent,
                                    CanalId = chatId
                                }));
                                return;
                            }

                            // send message to all clients who has this canal in their canal list
                            foreach (var client in clients)
                            {
                                client.Send(JsonConvert.SerializeObject(new WebsocketChatMessage()
                                {
                                    Message =
                                        _playerToken.Username + " @ " +
                                        TimeHelper.CurrentCanadaTimeString() +
                                        " : " + messageContent,
                                    CanalId = chatId
                                }));
                            }
                        }
                        return;
                    }
                    #endregion

                    #region Unregister from canal
                    // unregister from canal
                    if (!string.IsNullOrWhiteSpace(chatId))
                    {
                        if (MyCanalList.Contains(chatId))
                        {
                            MyCanalList.Remove(chatId);
                        }
                        else
                        {
                            Send(
                                JsonConvert.SerializeObject(new ErrorMessage()
                            {
                                Error = "Vous êtes déjà enregistrer à ce canal."
                            }));
                        }
                    }
                    #endregion
                    return;
                }

                Send(
                    JsonConvert.SerializeObject(new ErrorMessage()
                {
                    Error = "Format de communication invalide. Allez voir le document de communication."
                }));
            }
            catch (Exception e)
            {
                Send(JsonConvert.SerializeObject(new ErrorMessage()
                {
                    Error = e.Message
                }));
            }
        }
Beispiel #6
0
        public override void OnMessage(string message)
        {
            clients.Broadcast(string.Format("{0} said: {1}", name, message));

            clients.Where(x => ((TestWebSocketHandler)x).name != name).ToList().ForEach(x => x.Send("hi!" + ((TestWebSocketHandler)x).name));
        }
Beispiel #7
0
        public override void OnMessage(string message)
        {
            try
            {
                ResultClassForNonAuth result = new ResultClassForNonAuth();
                string baseURL = (WebConfigurationManager.AppSettings["WebSiteUrl"]);
                baseURL += (WebConfigurationManager.AppSettings["userimagepath"]).Replace("~", "");
                if (message.Split(',')[1].Split(':').Contains("GroupId"))
                {
                    var Message = message.Split(',')[2].Split(':')[1];
                    var UserId  = message.Split(',')[0].Split(':')[1];
                    var GroupId = message.Split(',')[1].Split(':')[1];

                    int GId       = Convert.ToInt32(GroupId);
                    int Uid       = Convert.ToInt32(UserId);
                    var groupname = "";

                    List <WebSocketSessionDb> list = new List <WebSocketSessionDb>();
                    MessageModel MessagesModel     = new MessageModel();
                    using (LystenEntities db = new LystenEntities())
                    {
                        groupname = db.Groups.Where(x => x.Id == GId).Select(x => x.Name).FirstOrDefault();
                        Message ms = new Message()
                        {
                            Body            = Message,
                            CreatedDate     = DateTime.UtcNow,
                            ParentMessageId = 0,
                            CreatorId       = Uid
                        };
                        db.Messages.Add(ms);
                        db.SaveChanges();

                        MessageRecipient MR = new MessageRecipient()
                        {
                            RecipientGroupId = GId,
                            RecipientId      = null,
                            MessageId        = ms.Id,
                            IsRead           = false
                        };
                        db.MessageRecipients.Add(MR);
                        db.SaveChanges();


                        int gid = Convert.ToInt32(GroupId);
                        list = db.WebSocketSessionDbs.Where(x => x.GroupID == gid).ToList();



                        var userdataTimeZone = db.User_Master.Where(x => x.Id == Uid).Select(x => x.TimeZone).FirstOrDefault();
                        var ddd = DateTime.UtcNow;
                        if (userdataTimeZone != null && userdataTimeZone != "")
                        {
                            Instant instant = Instant.FromDateTimeUtc(ms.CreatedDate.Value);
                            IDateTimeZoneProvider timeZoneProvider = DateTimeZoneProviders.Tzdb;
                            var usersTimezoneId    = userdataTimeZone; //just an example
                            var usersTimezone      = timeZoneProvider[usersTimezoneId];
                            var usersZonedDateTime = instant.InZone(usersTimezone);
                            ddd = usersZonedDateTime.ToDateTimeUnspecified();
                        }



                        MessagesModel = new MessageModel()
                        {
                            MessageId        = ms.Id,
                            Body             = ms.Body,
                            RecipientGroupId = GId,
                            CreatorId        = Uid,
                            IsRead           = false,
                            CreatedDate      = ddd.Date == DateTime.UtcNow.Date ? "Today " + Convert.ToDateTime((ddd)).ToString("HH:mm") : Convert.ToDateTime(ddd).ToString("dd MM yyyy HH:mm"),

                            //CreatedDate = Convert.ToDateTime(ms.CreatedDate).ToString("dd MM yyyy HH:MM"),
                            Image           = US.GetFavouriteImage(baseURL, Uid),
                            CreatorName     = db.User_Master.Where(y => y.Id == Uid).Select(y => y.FullName).FirstOrDefault() == null ? "" : db.User_Master.Where(y => y.Id == Uid).Select(y => y.FullName).FirstOrDefault(),
                            ParentMessageId = 0,
                            ExpiryDate      = System.DateTime.Now,
                            RecipientId     = 0
                        };
                        result.Code = (int)HttpStatusCode.OK;
                        result.Msg  = ap.Success;
                        result.Data = MessagesModel;
                    }
                    var json = new JavaScriptSerializer().Serialize(result);
                    foreach (var item in list)
                    {
                        foreach (var data in clients.Where(x => x.WebSocketContext.SecWebSocketKey == item.SessionId))
                        {
                            clients.SingleOrDefault(r => ((WebSocketHandler)r).WebSocketContext.SecWebSocketKey == item.SessionId).Send(json);
                        }
                        using (LystenEntities db = new LystenEntities())
                        {
                            var obj        = db.User_Master.Where(x => x.Id == item.UserId.Value).FirstOrDefault();
                            var sendername = db.User_Master.Where(x => x.Id == Uid).Select(x => x.FullName).FirstOrDefault();

                            if (obj != null)
                            {
                                if (obj.DeviceToken != null)
                                {
                                    try
                                    {
                                        sendMsgUser(GId, true, obj.DeviceToken, Message, groupname, sendername);
                                    }
                                    catch
                                    {
                                    }
                                }
                            }
                        }
                    }
                }
                else
                {
                    var Message      = message.Split(',')[2].Split(':')[1];
                    var UserId       = message.Split(',')[0].Split(':')[1];
                    var ReceiptionId = message.Split(',')[1].Split(':')[1];

                    int RId = Convert.ToInt32(ReceiptionId);
                    int Uid = Convert.ToInt32(UserId);


                    List <WebSocketSessionDb> list = new List <WebSocketSessionDb>();
                    MessageModel MessagesModel     = new MessageModel();
                    var          SenderFullName    = "";

                    using (LystenEntities db = new LystenEntities())
                    {
                        SenderFullName = db.User_Master.Where(x => x.Id == Uid).Select(x => x.FullName).FirstOrDefault();

                        if (!db.MessageRequests.Any(x => x.ToUserId == RId && x.FromUserId == Uid || x.FromUserId == RId && x.ToUserId == Uid))
                        {
                            MessageRequest M1R = new MessageRequest();
                            M1R.ToUserId    = Convert.ToInt32(RId);
                            M1R.FromUserId  = Convert.ToInt32(Uid);
                            M1R.IsAccept    = false;
                            M1R.IsReject    = false;
                            M1R.IsRequested = true;
                            db.MessageRequests.Add(M1R);
                            db.SaveChanges();
                            var obj = db.User_Master.Where(x => x.Id == M1R.ToUserId).FirstOrDefault();


                            if (obj.DeviceToken != null || obj.DeviceToken != "")
                            {
                                try
                                {
                                    if (obj.DeviceType == "Android")
                                    {
                                        Helpers.NotificationHelper.sendMsgUserRequest(obj.Id, obj.DeviceToken, 0, SenderFullName);
                                    }
                                    else
                                    {
                                        sendMsgUserRequest(obj.Id, obj.DeviceToken, 0, SenderFullName);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    CommonServices.ErrorLogging(ex);
                                }
                            }
                        }
                        Message ms = new Message()
                        {
                            Body            = Message,
                            CreatedDate     = DateTime.UtcNow,
                            ParentMessageId = 0,
                            CreatorId       = Uid
                        };
                        db.Messages.Add(ms);
                        db.SaveChanges();
                        MessageRecipient MR = new MessageRecipient()
                        {
                            RecipientGroupId = null,
                            RecipientId      = RId,
                            MessageId        = ms.Id,
                            IsRead           = false
                        };
                        db.MessageRecipients.Add(MR);
                        db.SaveChanges();
                        list = db.WebSocketSessionDbs.Where(x => x.RecipientId == RId && x.UserId == Uid || (x.RecipientId == Uid && x.UserId == RId)).ToList();


                        var userdataTimeZone = db.User_Master.Where(x => x.Id == Uid).Select(x => x.TimeZone).FirstOrDefault();
                        var ddd = DateTime.UtcNow;
                        if (userdataTimeZone != null && userdataTimeZone != "")
                        {
                            Instant instant = Instant.FromDateTimeUtc(ms.CreatedDate.Value);
                            IDateTimeZoneProvider timeZoneProvider = DateTimeZoneProviders.Tzdb;
                            var usersTimezoneId    = userdataTimeZone; //just an example
                            var usersTimezone      = timeZoneProvider[usersTimezoneId];
                            var usersZonedDateTime = instant.InZone(usersTimezone);
                            ddd = usersZonedDateTime.ToDateTimeUnspecified();
                        }
                        try
                        {
                            MessagesModel = new MessageModel()
                            {
                                MessageId        = ms.Id,
                                Body             = ms.Body,
                                RecipientGroupId = 0,
                                CreatorId        = Uid,
                                IsRead           = false,

                                CreatedDate = ddd.Date == DateTime.UtcNow.Date ? "Today " + Convert.ToDateTime((ddd)).ToString("HH:mm") : Convert.ToDateTime(ddd).ToString("dd MM yyyy HH:mm"),


                                //CreatedDate = ms.CreatedDate.Value.Date == DateTime.Now.Date ? "Today " + Convert.ToDateTime((ms.CreatedDate.Value)).ToString("HH:mm") : Convert.ToDateTime(ms.CreatedDate.Value).ToString("dd MM yyyy HH:mm"),

                                //CreatedDate = Convert.ToDateTime(ms.CreatedDate).ToString("dd MM yyyy HH:MM"),
                                Image           = US.GetFavouriteImage(baseURL, Uid),
                                CreatorName     = db.User_Master.Where(y => y.Id == Uid).Select(y => y.FullName).FirstOrDefault() == null ? "" : db.User_Master.Where(y => y.Id == Uid).Select(y => y.FullName).FirstOrDefault(),
                                ParentMessageId = 0,
                                ExpiryDate      = System.DateTime.Now,
                                RecipientId     = RId
                            };
                        }
                        catch (Exception ex)
                        {
                            CommonServices.ErrorLogging(ex);
                        }
                        result.Code = (int)HttpStatusCode.OK;
                        result.Msg  = ap.Success;
                        result.Data = MessagesModel;
                    }
                    try
                    {
                        var json = new JavaScriptSerializer().Serialize(result);
                        foreach (var item in list)
                        {
                            foreach (var data in clients.Where(x => x.WebSocketContext.SecWebSocketKey == item.SessionId))
                            {
                                clients.SingleOrDefault(r => ((WebSocketHandler)r).WebSocketContext.SecWebSocketKey == item.SessionId).Send(json);
                            }
                            using (LystenEntities db = new LystenEntities())
                            {
                                var obj = db.User_Master.Where(x => x.Id == item.RecipientId.Value).FirstOrDefault();


                                if (obj != null)
                                {
                                    //if (obj.DeviceToken != null)
                                    //{
                                    //    sendMsgEventsssss(item.UserId.Value, obj.DeviceToken, Message, SenderFullName);
                                    //}

                                    try
                                    {
                                        if (obj.DeviceToken != null)
                                        {
                                            if (obj.DeviceType == "Android")
                                            {
                                                Helpers.NotificationHelper.sendMsgEventsssss(item.UserId.Value, obj.DeviceToken, Message, SenderFullName, MessagesModel.MessageId);
                                            }
                                            else
                                            {
                                                sendMsgEventsssss(item.UserId.Value, obj.DeviceToken, Message, SenderFullName);
                                                //sendMsgUserRequest(obj.Id, obj.DeviceToken, 0, SenderFullName);
                                            }
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        CommonServices.ErrorLogging(ex);
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        CommonServices.ErrorLogging(ex);
                    }
                }
            }
            catch (Exception ex)
            {
                CommonServices.ErrorLogging(ex);
            }
        }
Beispiel #8
0
        public static void SendMessage(string serviceType, string nameOfHook, string messageContent, string botName, string channelOrPersonTo, string responseURL = null)
        {
            if (serviceType != null)
            {
                if (serviceType.ToLower() == "slack")
                {
                    messageContent = GetFormattedMessage("slack", messageContent);

                    using (WebClient client = new WebClient())
                    {
                        SlackClient sclient;

                        if ((responseURL != null) && (responseURL != ""))
                        {
                            sclient = new SlackClient(responseURL);
                        }
                        else
                        {
                            string urlWithAccessToken = GetAccessToken(serviceType, nameOfHook);
                            sclient = new SlackClient(urlWithAccessToken);
                        }

                        sclient.PostMessage(username: botName,
                                            text: messageContent,
                                            channel: channelOrPersonTo);
                    }
                }
                else if (serviceType.ToLower() == "ws")
                {
                    messageContent = GetFormattedMessage("html", messageContent);

                    WebSocketCollection wsClients = (WebSocketCollection)HttpContext.Current.Application["WSClients"];

                    List <WebSocketHandler> filtered = wsClients.Where(r => ((GameAccessWebSocketHandler)r).userID == channelOrPersonTo).ToList();

                    foreach (WebSocketHandler h in filtered)
                    {
                        h.Send(messageContent);
                    }
                }

                /*else if (serviceType.ToLower() == "bc")
                 * {
                 *      List<BotClient> botClients = (List<BotClient>)HttpContext.Current.Application["BotClients"];
                 *      BotClient bc = botClients.FirstOrDefault(bot => bot.UserID == channelOrPersonTo);
                 *      if (bc != null)
                 *      {
                 * string formatType = "skype";
                 * if (bc.ChannelType.ToLower() == "skype")
                 * {
                 * formatType = "skype";
                 * }
                 * else if (bc.ChannelType.ToLower() == "slack")
                 * {
                 * formatType = "slack";
                 * }
                 *
                 * messageContent = GetFormattedMessage(formatType, messageContent);
                 *
                 * BotClientUtility.SendMessage(bc, messageContent);
                 *      }
                 * }*/
            }
        }