当前位置: 首页 > news >正文

lua版的Frpc

今天闲着没事干,研究了下lua,lua是个好东西刚好前几天编译了frp位动态库所以顺便就做了个lua版本的frpc 其实这玩意也没啥用主要就是学习学习。
一、首先编译frp为动态库这个简单搭建go的环境添加几个导出函数编译就行没啥难的,今天学习lua就是想用lua 调用fprc的动态库启动起来。
主要的接口:

#pragma once
#include <string>
#include "libfrpc.h"
#include "lua.h"
using namespace std;
/*
* 根据配置内容启动frpc
*/
long long LuaStartClientByContent(const char* cfgFilePath, const char* content, const char* uid);
/*
* 根据配置文件启动frpc
*/
long long LuaStartClient(const char* cfgFilePath, const char* uid);
/*
* 查询frpc的状态
*/
long long LuaGetClientState(const char* uid);
/*
* 停止frpc的状态
*/
long long LuaStopClient(const char* uid);
/*
* 注册Frpc的一些状态变化
*/
int LuaRegisterCallback(const char* scriptPath, const char* callbackFunctionName);

lua调用的如下:

-- 加载模块
local callback = require("luafrpc")
callback.LuaRegisterCallback("frpcallback.lua","callback")
--这里可以是绝对路径也可以是相对路径
local ret = callback.LuaStartClient("frpc.toml", "123456")
print(ret)

不过这里我只调用了两个接口实际可以调用上面的几个接口都是可以的,具体的参考c++那几个接口
以下是frpc的头文件

/* Code generated by cmd/cgo; DO NOT EDIT. *//* package github.com/fatedier/frp/cmd/frpc */#line 1 "cgo-builtin-export-prolog"#include <stddef.h>#ifndef GO_CGO_EXPORT_PROLOGUE_H
#define GO_CGO_EXPORT_PROLOGUE_H#ifndef GO_CGO_GOSTRING_TYPEDEF
typedef struct { const char *p; ptrdiff_t n; } _GoString_;
#endif#endif/* Start of preamble from import "C" comments.  */#line 16 "main.go"#include <stdlib.h>
#include <string.h>typedef int (*CallBackFunc)(int, const char*,long long,const char*);static int callCallBack(CallBackFunc cb, int v, const char* s,long long len,const char* uid) {return cb(v, s,len,uid);
}#line 1 "cgo-generated-wrapper"/* End of preamble from import "C" comments.  *//* Start of boilerplate cgo prologue.  */
#line 1 "cgo-gcc-export-header-prolog"#ifndef GO_CGO_PROLOGUE_H
#define GO_CGO_PROLOGUE_H/* 移除原始架构检查(替换为更安全的版本) */
#if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || defined(__aarch64__)
/*static assertion to make sure the file is being used on architectureat least with matching size of GoInt.
*/
typedef char _check_for_64_bit_pointer_matching_GoInt[sizeof(void*) == 64 / 8 ? 1 : -1];
#else
typedef char _check_for_64_bit_pointer_matching_GoInt[sizeof(void*) == 32 / 8 ? 1 : -1];
#endiftypedef signed char GoInt8;
typedef unsigned char GoUint8;
typedef short GoInt16;
typedef unsigned short GoUint16;
typedef int GoInt32;
typedef unsigned int GoUint32;
typedef long long GoInt64;
typedef unsigned long long GoUint64;
typedef GoInt64 GoInt;
typedef GoUint64 GoUint;
typedef size_t GoUintptr;
typedef float GoFloat32;
typedef double GoFloat64;#ifdef _MSC_VER
//#include <complex.h>
//typedef float _Complex GoComplex64;
//typedef double _Complex GoComplex128; 
#else
typedef float _Complex GoComplex64;
typedef double _Complex GoComplex128;
#endif#ifndef GO_CGO_GOSTRING_TYPEDEF
typedef _GoString_ GoString;
#endif
typedef void *GoMap;
typedef void *GoChan;
typedef struct { void *t; void *v; } GoInterface;
typedef struct { void *data; GoInt len; GoInt cap; } GoSlice;#endif/* End of boilerplate cgo prologue.  */#ifdef __cplusplus
extern "C" {
#endifextern __declspec(dllexport) void RegisterCallback(CallBackFunc f);
extern __declspec(dllexport) GoInt StartClientByContent(GoString cfgFilePath, GoString content, GoString uid);
extern __declspec(dllexport) GoInt StartClient(GoString cfgFilePath, GoString uid);
extern __declspec(dllexport) GoInt GetClientState(GoString uid);
extern __declspec(dllexport) GoUint8 StopClient(GoString uid);#ifdef __cplusplus
}
#endif

写了这么多其实没啥用,就是记录下自己学习的记录,frpc实际用处直接启动官方提供的exe就ok了

最后附上链接:lua版本frpc

相关文章:

  • 网页后端开发(基础2--maven单元测试)
  • 卷积神经网络中的通道注意力机制
  • Vue 3.5.13 中 `defineModel` 的局限性及解决方案
  • SpringAI+DeepSeek大模型应用开发——6基于MongDB持久化对话
  • 使用 MCP 驱动的分布式智能扩展 Space-O-RAN
  • sql解析,日期 trunc sysdate
  • Leetcode 刷题记录 12 —— 二叉树第三弹
  • 第19篇:数据库中间件中的 SQL 分析与审计机制设计
  • MCP案例 - 数据可视化工具服务器
  • 包含15个APP客户端UI界面的psd适用于餐厅咖啡店面包店快餐店
  • PyTorch数据分割全流程指南:从MNIST数据集到模型训练
  • 批量下载图片小工具
  • linux多线程之可重入函数
  • 面经的疑难杂症
  • Proteus8.17仿真51单片机驱动ST7920 LCD12864
  • vue2中setTimeout中调用methods方法问题
  • 基于51单片机的智能小车:按键调速、障碍跟踪、红外循迹与数码管显示(一个合格的单片机课设)
  • Elasticsearch9 + 通义大模型实现语义检索操作详解
  • Qt3d中的材质--PBR材质
  • Android 修改了页面的xml布局,使用了databinding,这时候编译时需要用到apt吗
  • 济南网站建设内容设计/免费培训课程
  • 汕头手机模板建站/semseo
  • 网站建设如何记账/成都关键词优化报价
  • 微信网站怎么做下载附件/免费发布广告信息的网站
  • 培训型网站 建设方案/如何建立自己的网页
  • 采集的网站怎么做收录/semen