/// <summary> /// 处理数据结果。 /// </summary> /// <param name="type"></param> /// <param name="data"></param> /// <returns></returns> private byte[] HandleResult(WebSocketMessageType type, byte[] data) { if (type == WebSocketMessageType.Binary) { if (data.Length == 1 && data[0] == '\0') { OnHeartBeating(); } else { OnReceived(data); } } else if (type == WebSocketMessageType.Text) { var content = AcceptContext.Option.Encoding.GetString(data); InvokeMessage message; try { OnReceived(content); message = AcceptContext.Option.Formatter.ResolveMessage(content); } catch (Exception exp) { OnResolveError(content, exp); return(null); } Type returnType = null; try { var method = FindMethod(message); var authContext = new AuthorizeContext(AcceptContext.User, method, message.Arguments); if (!OnAuthorizing(authContext)) { throw new Exception($"未通过认证 {message.Method}。"); } var arguments = ResolveArguments(method, message); var result = method.FastInvoke(this, arguments); if (method.ReturnType.IsGenericType && method.ReturnType.GetGenericTypeDefinition() == typeof(Task <>)) { returnType = method.ReturnType.GetGenericArguments()[0]; result = method.ReturnType.GetProperty("Result").GetValue(result); } else if (method.ReturnType != typeof(void) && method.ReturnType != typeof(Task)) { returnType = method.ReturnType; } if (returnType != null) { message.IsReturn = 1; return(ReturnValue(message, result)); } } catch (Exception exp) { OnInvokeError(message, new WebSocketHandleException(ConnectionId, "处理接收到的数据时发生异常。", exp)); return(ReturnValue(message, returnType?.GetDefaultValue())); } } return(null); }
/// <summary> /// 用户认证。 /// </summary> /// <param name="context"></param> /// <returns></returns> protected virtual bool OnAuthorizing(AuthorizeContext context) { return(true); }