/// <summary>
 /// 对信道服务器使用 POST 方法推送到业务服务器的报文进行处理
 /// </summary>
 /// <param name="handler">客户使用的信道服务处理实例,用于处理解析之后的包</param>
 private void HandlePost(ITunnelHandler handler, TunnelHandleOptions options)
 {
     using (SdkDebug.WriteLineAndIndent($"> 收到信道服务器 POST 过来的报文 (Time: {DateTime.Now.ToString("HH:mm:ss")})"))
     {
         DoHandlePost(handler);
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// 处理 WebSocket 信道请求
        /// </summary>
        /// <param name="handler">提供 WebSocket 信道处理器处理信道事件</param>
        /// <param name="options">可选,配置处理选项</param>
        /// <returns>返回任务进行跟踪,任务完成表示信道处理完成</returns>
        public void Handle(ITunnelHandler handler, TunnelHandleOptions options = null)
        {
            if (Request.Method.ToUpper() == "GET")
            {
                HandleGet(handler, options);
            }

            if (Request.Method.ToUpper() == "POST")
            {
                HandlePost(handler, options);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 处理 WebSocket 信道 GET 请求
        /// </summary>
        ///
        /// <remarks>
        /// GET 请求表示客户端请求进行信道连接,此时会向 SDK 申请信道连接地址,并且返回给客户端
        /// 如果配置指定了要求登陆,还会调用登陆服务来校验登陆态并获得用户信息
        /// </remarks>
        private void HandleGet(ITunnelHandler handler, TunnelHandleOptions options)
        {
            Configuration config = ConfigurationManager.CurrentConfiguration;

            Tunnel   tunnel = null;
            UserInfo user   = null;

            // 要求登录态,获取用户信息
            if (options?.CheckLogin == true)
            {
                try
                {
                    LoginService loginService = new LoginService(Request, Response);
                    user = loginService.Check();
                }
                catch
                {
                    // 要求检查登录态的话,发生异常就结束了
                    return;
                }
            }

            // 申请 WebSocket 信道连接地址
            TunnelAPI tunnelApi = new TunnelAPI();

            try
            {
                tunnel = tunnelApi.RequestConnect(BuildReceiveUrl());
            }
            catch (Exception e)
            {
                Response.WriteJson(new { error = e.Message });
                throw e;
            }

            // 输出 URL 结果
            Response.WriteJson(new { url = tunnel.ConnectUrl });

            handler.OnTunnelRequest(tunnel, user);
        }