/// <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); }
/// <summary> /// 关闭当前信道 /// </summary> /// <returns>返回信道关闭送结果,可能包含无效信道列表</returns> /// <exception cref="EmitException">网络不可用或信道服务器不可用</exception> public EmitResult Close() { TunnelAPI api = new TunnelAPI(); return(api.EmitPacket(new string[] { Id }, "close", null)); }
/// <summary> /// 通过信道发送消息 /// </summary> /// <param name="messageType">消息类型</param> /// <param name="messageContent">消息内容,可以为任意类型,不过对象必须可以被序列化,建议使用 JSONObject</param> /// <returns>返回信道发送结果,可能包含无效信道列表</returns> /// <exception cref="EmitException">网络不可用或信道服务器不可用</exception> public EmitResult Emit(string messageType, object messageContent = null) { TunnelAPI api = new TunnelAPI(); return(api.EmitMessage(new string[] { Id }, messageType, messageContent)); }
/// <summary> /// 发送消息到房间里的所有信道 /// </summary> /// <param name="messageType">消息类型</param> /// <param name="messageContent">消息内容,可以为任意类型,不过对象必须可以被序列化</param> /// <returns>返回信道发送结果,可能包含无效信道列表</returns> /// <exception cref="EmitException">网络不可用或信道服务器不可用</exception> public EmitResult Broadcast(string messageType, object messageContent) { TunnelAPI api = new TunnelAPI(); return(api.EmitMessage(Tunnels.Select(x => x.Id), messageType, messageContent)); }