首页 > 其他分享 >非rtti路由

非rtti路由

时间:2023-06-16 20:45:56浏览次数:35  
标签:function begin end funcName className router rtti 路由

非rtti路由

/// <author>2023-3-13</author> fit delphi\lazarus
unit api.router;
{$I def.inc}

interface

uses
  mormot.net.ws.core,
  mormot.net.http, yn.log, Classes, StrUtils, SysUtils;

type
  /// <summary>
  /// http function
  /// </summary>
  TFun = procedure(ctxt: THttpServerRequestAbstract) of object;
  /// <summary>
  /// websocket function
  /// </summary>
  TFunWs = function(reqFrame: TWebSocketFrame): RawByteString of object;
  /// <code>
  /// base-class
  /// </code>

  TFunc = class(TPersistent);

/// <summary>
/// router http function
/// </summary>
procedure router(className, funcName: string; ctxt: THttpServerRequestAbstract);
/// <summary>
/// router websocket function
/// </summary>
/// <param name="className"></param>
/// <param name="funcName"></param>
/// <param name="inFrame"></param>
/// <param name="outFrame"></param>
function routerWs(className, funcName: string; reqFrame: TWebSocketFrame): RawByteString;

implementation

function routerWs(className, funcName: string; reqFrame: TWebSocketFrame): RawByteString;
var
  m: TMethod;
  f: TFunWs;
  p: TPersistentClass;
begin
  try
    p := FindClass(className);
    if p = nil then
      exit;
    m.Data := Pointer(p);
    m.Code := p.MethodAddress(funcName);
    if Assigned(m.Code) then
    begin
      f := TFunWs(m);
      Result := f(reqFrame);
    end;
  except
    on E: Exception do
    begin
      yn.log.WriteLog('api.router.routerWs()' + E.Message);
    end;
  end;
end;

procedure router(className, funcName: string; ctxt: THttpServerRequestAbstract);
var
  m: TMethod;
  f: TFun;
  p: TPersistentClass;
begin
  try
    p := FindClass(className);
    if p = nil then
      exit;
    m.Data := Pointer(p);
    m.Code := p.MethodAddress(funcName);
    if Assigned(m.Code) then
    begin
      f := TFun(m);
      f(ctxt);
    end;
  except
    on E: Exception do
    begin
      yn.log.WriteLog('api.router.router()' + E.Message);
    end;
  end;
end;

end.

  

标签:function,begin,end,funcName,className,router,rtti,路由
From: https://www.cnblogs.com/hnxxcxg/p/17486470.html

相关文章

  • 10.静态路由
    静态路由,无需消耗网络设备的CPU的资源来计算分析,但是静态路由需要网络管理员手动配置和维护,同时静态路由不能动态根据网络拓扑的改变而改变。静态路由格式:[***]iproute-static目标网段目标网段掩码下一跳ip地址根据直连路由的情况可知,数据不能全网互通,是因为路由表中缺少路......
  • 9、直连路由
    不同网段之间数据访问需要路由信息(路由表),路由就是通往目标的路径。路由表中有三种路由:直连路由、静态路由、动态路由。直连路由一半只要在路由器接口配上ip地址,物理与协议都是up状态就可建立,不需要网络人员维护,但是直连路由无法获取与其不直接相邻的路由信息。直连路由是所有路由......
  • 关于vue2路由跳转问题记录
    1.vue路由间跳转和新开窗口的方式(query,params)路由间跳转配置:query方式:参数会在url中显示this.$router.push({path:'路由地址',query:{msg:'helloworld'}})params方式:传参数据不会在导航栏中显示,需要配合路由的name属性使用。this.$......
  • 华为路由器、交换机、AC忘记密码,保留配置处理方法 密码恢复
    在不能通过telnet登录的情况下通过console线更改:通过BootROM清除Console口登录密码交换机的BootROM提供了清除Console口登录密码的功能,用户可以在交换机启动后修改Console口登录密码,然后保存配置。请按照如下步骤进行配置。第一步1.通过Console口连接交换机,......
  • Kong入门学习实践(4)负载均衡与正则路由
    最近在学习Kong网关,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。由于我司会直接使用Kong企业版,学习过程中我会使用Kong开源版。本篇,我们学习快速配置一个最常见的基本功能:负载均衡与正则路由。关于负载均衡所谓负载均衡,就是通过负载均衡算......
  • Neo4j中的网络路由
    人们使用Neo4j来管理企业架构。如果你还没有看到该演讲由托马斯·劳伦斯来自Amadeus的,那么你应该为自己观看。但是低层网络呢?我们可以使用Neo4j来建模物理网络中的路由吗?当然我们可以,今天我会告诉你如何。我们将保持简单,只需要路由器,交换机,接口和服务器。路由器之间将具有“ROUTE_T......
  • v3路由配置
    importtype{RouteRecordRaw}from'vue-router';importtype{App}from'vue';import{createRouter,createWebHistory}from'vue-router';import{basicRoutes}from'./routes';import{REDIRECT_NAME}from&#......
  • Kong入门学习实践(3)路由转发
    最近在学习Kong网关,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。由于我司会直接使用Kong企业版,学习过程中我会使用Kong开源版。本篇,我们学习快速配置一个最常见的基本功能:路由转发。关于路由转发路由转发是Nginx等代理软件最常见的使用场......
  • 路由守卫
    一、分类(1)全局守卫router.beforeEach全局前置守卫进入路由之前router.beforeResolve全局解析守卫(2.5.0+)在beforeRouteEnter调用之后调用router.afterEach全局后置钩子进入路由之后(2)路由独享守卫beforeEnter(3)路由组件内的守卫beforeRouteEnter进入......
  • vue路由
    1、在dos窗口下安装npminstallvue-router@3--save-dev--registry=http://registry.npmmirror.com2、配置路由①在src目录下面,新建router文件夹②然后再其中创建index.js路由文件、index.js代码importVuefrom'vue'//导入路由插件importVueRouterfrom'......