protected override void OnMessage(MessageEventArgs e)
        {
            Task.Factory.StartNew(async() =>
            {
                do
                {
                    var @params = e.Data.ParseParameter();
                    var inparam = @params.Where(x => string.CompareOrdinal(x.Key, TYPE) != 0).Select(x => x.Value).ToArray();
                    if (@params.ContainsKey(TYPE) && string.CompareOrdinal(@params[TYPE], DETAIL) == 0)
                    {
                        var result         = _videoCardInfo.GetDetails(inparam);
                        var completeResult = result.ConfigureAwait(false).GetAwaiter().GetResult();
                        Sessions.BroadcastAsync(JsonConvert.SerializeObject(completeResult), () => { });
                    }

                    if (@params.ContainsKey(TYPE) && string.CompareOrdinal(@params[TYPE], CARDS) == 0)
                    {
                        // while (Sessions.ActiveIDs.Any())
                        var result         = _videoCardInfo.VideoCards(inparam);
                        var completeResult = result.ConfigureAwait(false).GetAwaiter().GetResult();
                        Sessions.BroadcastAsync(JsonConvert.SerializeObject(completeResult), () => { });
                    }
                    base.OnMessage(e);
                    //   await Task.Delay(_configuration.MonitoringInterval, _ctxCancellationToken.Token);
                } while (!_ctxCancellationToken.IsCancellationRequested);
            }, _ctxCancellationToken.Token);
        }
Exemple #2
0
        /// <summary>
        /// 得到訊息
        /// </summary>
        /// <param name="e"></param>
        protected override void OnMessage(MessageEventArgs e)
        {
            /*
             *  PS:目前沒看到可以像 python 一樣,有個共用的變數(每個都是各自的 MyWebSocket 物件)
             *      => 只只能放在 DB中, 或者前端自己存
             *      => 或者用 Static 變數(如下)
             */

            // 儲存共用的資料
            CommonVar.messageList.Add($"{this.ID}:{e.Data}");
            var a = CommonVar.messageList;

            string message = e.Data;

            Console.WriteLine($"id = {this.ID} 送出訊息: {message}");

            string response = $"id = {this.ID} 送出訊息:{message}";

            // 廣播資料
            Sessions.BroadcastAsync(Encoding.UTF8.GetBytes(response), null);

            // 得到目前活躍所有的人
            List <string> currentIds = Sessions.ActiveIDs.ToList();
            // 所有的 id
            //List<string> allIds = Sessions.IDs.ToList();

            // 送給單一個人 (用上面的 id 來決定給誰)
            // 自已這隻本身的id 就是 this.ID
            //Sessions.SendTo(Encoding.UTF8.GetBytes(response), "上面的currentIds選一個");
            //Sessions.SendToAsync(Encoding.UTF8.GetBytes(response), "上面的currentIds選一個", null);

            // 關閉某個人
            //Sessions.CloseSession("上面的currentIds選一個");
        }
Exemple #3
0
        /// <summary>
        ///  開啟
        /// </summary>
        protected override void OnOpen()
        {
            Console.WriteLine("WebSocket 開啟\n");

            // 自已這隻 本身的 ID
            Console.WriteLine($"觀迎新加入的人, id = {this.ID}\n");

            // 全部的 id (這方法能用,但不好)
            // 以後 登入進來後,傳 id 給前端 讓 前端記住 他是哪個 id
            List <string> currentIDs         = Sessions.ActiveIDs.ToList();
            var           openSuccessMessage = $" 你是 第 {currentIDs.IndexOf(this.ID) + 1} 位 連上的使用者, 你的 id 是 {this.ID}";

            Sessions.SendTo(Encoding.UTF8.GetBytes(openSuccessMessage), this.ID);

            // 廣播
            string addMessage = $" id = {this.ID} 已經加入了房間";

            Sessions.BroadcastAsync(Encoding.UTF8.GetBytes(addMessage), null);

            /*
             * 如果要做 進來後有各自的名字的話 (前端儲存紀錄檔)
             * 而在一開始 Open 的時候 傳給使用者 其 id (要自己記得), 然後再傳給全部人 (告訴全部人現在所有的 id)
             * 而名字的部份,就讓 使用者 傳上來後, 用 id 去判別是誰傳的 。 再告訴全部人, 這個 id 叫什麼名字 即可
             */
        }
        public void BroadcastBacklog()
        {
            var packet = new BacklogPacket
            {
                backlog = AccountantData.Instance.history.ToList()
            };

            Sessions.BroadcastAsync(DumpJson(packet), null);
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="data"></param>
 /// <param name="cb"></param>
 public void BroadcastAsync(byte[] data, Action cb)
 {
     Sessions.BroadcastAsync(data, () =>
     {
         var sessionsCnt = Sessions.Count;
         PerformanceMonitor.Ins.RecordWrite(sessionsCnt * data.Length, sessionsCnt);
         cb();
     });
 }
Exemple #6
0
        /// <summary>
        /// 關閉
        /// </summary>
        /// <param name="e"></param>
        protected override void OnClose(CloseEventArgs e)
        {
            string errorReason = e.Reason;

            Console.WriteLine($"WebSocket 關關中, 原因 = {errorReason}");
            Console.WriteLine($"id = {this.ID}  已離開");

            // 廣播
            string leaveMessage = $" id = {this.ID} 已經離開了房間";

            Sessions.BroadcastAsync(Encoding.UTF8.GetBytes(leaveMessage), null);
        }
Exemple #7
0
 protected override void OnOpen()
 {
     Console.WriteLine("客戶端開啟~");
     _sendTimeStamp = true;
     while (_sendTimeStamp)
     {
         var message = "現在時間:" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ssfff");
         Console.WriteLine(message);
         Sessions.BroadcastAsync(Encoding.UTF8.GetBytes(message), null);
         Thread.Sleep(500);
     }
 }
        public void BroadcastLocstrings(List <string> itemnames)
        {
            var locstrings = new Dictionary <string, string>();

            foreach (var name in itemnames)
            {
                locstrings[name] = AccountantData.NameMapping[name];
            }

            var packet = new LocPacket
            {
                locs = locstrings
            };

            Sessions.BroadcastAsync(DumpJson(packet), null);
        }
Exemple #9
0
        protected override void OnMessage(MessageEventArgs e)
        {
            if (e.IsText)
            {
                Console.WriteLine("> " + e.Data);
                JObject json = JObject.Parse(e.Data);
                string  type = "BR";
                if (json["type"] != null)
                {
                    type = json["type"].ToString();
                }
                switch (type)
                {
                case "TO":
                    if (json["to"].ToString() != null)
                    {
                        string to = json["to"].ToString();
                        Sessions.SendToAsync(e.Data, to, null);
                    }
                    break;

                case "ALL":
                    Sessions.BroadcastAsync(e.Data, null);
                    break;

                default:
                    foreach (var s in Sessions.Sessions)
                    {
                        if (s.ID != ID)
                        {
                            Sessions.SendToAsync(e.Data, s.ID, null);
                        }
                    }
                    break;
                }
            }
            if (e.IsBinary)
            {
                foreach (var s in Sessions.Sessions)
                {
                    if (s.ID != ID)
                    {
                        Sessions.SendToAsync(e.RawData, s.ID, null);
                    }
                }
            }
        }
 public void BroadcastInventory()
 {
     Sessions.BroadcastAsync(GetInventoryString(), null);
 }
Exemple #11
0
 public virtual void BroadcastMessageAllAsync(string message)
 {
     Sessions.BroadcastAsync(message, OnBroadcastComplete);
 }