コード例 #1
0
        /// <summary>
        /// 中间件调用
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task Invoke(HttpContext context)
        {
            //判断是否为websocket请求
            if (context.WebSockets.IsWebSocketRequest)
            {
                //接收客户端
                // var cancellationToken = context.RequestAborted;
                var currentWebSocket = await context.WebSockets.AcceptWebSocketAsync();

                var socket = new PayStationWebSocket {
                    WebSocket = currentWebSocket
                };
                _SetStationInfo(socket, context);//设置客户端的数据
                await _wsconnMgr.AddSocket(socket);

                while (socket.WebSocket.State == WebSocketState.Open &&
                       (DateTime.Now - socket.CreatTime).TotalSeconds < this.socketStationTimeoutSeconds)
                {
                    // if (cancellationToken.IsCancellationRequested) break;
                    //处理数据
                    if (_wsHandler.HasNewOrder(socket))//如果有新的订单,则通知前端新的订单
                    {
                        await _wsHandler.NotifyStationNewPayOrder(socket);

                        _wsHandler.ClearPayOrderId(socket);
                    }
                    Thread.Sleep(500);
                }
                await _wsconnMgr.RemoveSocket(socket);
            }
            await this._next(context);
        }
コード例 #2
0
        //获取传入的基础信息
        private void _SetStationInfo(PayStationWebSocket socket, HttpContext context)
        {
            var qs         = context.Request.QueryString;
            var stationId  = Convert.ToInt32(context.Request.Query["stationId"]);
            var doctorId   = Convert.ToInt32(context.Request.Query["doctorId"]);
            var stationId2 = Convert.ToInt32(context.User.FindFirst("stationId"));
            var doctorId2  = Convert.ToInt32(context.User.FindFirst("doctorId"));

            socket.StationId = stationId;
            socket.DoctorId  = doctorId;
        }
コード例 #3
0
 /// <summary>
 /// 判断是否有新的订单
 /// </summary>
 public bool HasNewOrder(PayStationWebSocket socket)
 {
     if (socket.PayOrderId == null)
     {
         return(false);
     }
     else
     {
         return(true);
     }
 }
コード例 #4
0
 /// <summary>
 /// 通知工作站新订单情况 ,以方便前端启动新订单支付监控
 /// </summary>
 /// <returns>返回json格式的字符串</returns>
 public async Task NotifyStationNewPayOrder(
     PayStationWebSocket socket,
     CancellationToken cancellationToken = default(CancellationToken))
 {
     var rtn = new
     {
         rlt        = true,
         msg        = "",
         payOrderId = socket.PayOrderId,
         notifyTime = DateTime.Now,
         stationId  = socket.StationId,
         doctorId   = socket.DoctorId
     };
     var buffer  = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(rtn));
     var segment = new ArraySegment <byte>(buffer);
     await socket.WebSocket.SendAsync(segment, WebSocketMessageType.Text, true, cancellationToken);
 }
コード例 #5
0
 /// <summary>
 /// 清空支付单号
 /// </summary>
 /// <param name="socket"></param>
 public void ClearPayOrderId(PayStationWebSocket socket)
 {
     socket.PayOrderId = null;
 }