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