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

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

http://www.xdnf.cn/news/14388.html

相关文章:

  • go.work
  • 车载通信架构 --- IP ECU 在连接被拒绝后的重连机制
  • Spring Cloud Gateway 全面学习指南
  • 论文略读:MLPs Learn In-Context on Regression and Classification Tasks
  • CM工作室发展史 下
  • Python装饰器:优雅增强函数行为的艺术
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月14日第108弹
  • Win10安装DockerDesktop踩坑记
  • Java学习_‘+’作连接符的情况
  • Go语言底层(五): 深入浅出Go语言的ants协程池
  • ASR语音转写技术全景解析:从原理到实战
  • shell三剑客
  • FileBrowser Quantum更丝滑的文件网盘共享FileBrowser的平替
  • Python命名空间与作用域:深入解析名称查找的艺术
  • halcon开发之我与阿莲的故事1
  • Web自动化测试详细流程和步骤
  • Vue框架详解与Element
  • Python Day51 学习(日志Day20复习)
  • Atcoder Beginner Contest 410 题解报告
  • 来自麻省理工和AI制药公司 Recursion 的结构与结合亲和力预测模型Boltz-2,解决小分子药物发现的关键问题
  • 高频计网面试题(附模板答案)
  • 电子计数跳绳加长改造
  • 多线程5(Thread)
  • wpa_supplicant:无线网络连接的“智能管家”
  • 龟兔赛跑算法(Floyd‘s Cycle-Finding Algorithm)寻找重复数
  • ResizeObserver的错误
  • Bootstrap 5学习教程,从入门到精通, Bootstrap 5 分页(Pagination)知识点及案例代码(13)
  • Android平台如何高效移动RTMP|RTSP直播流的录像文件?
  • Web端测试、App测试和小程序测试的主要内容、注意事项及三者区别
  • CocosCreator 之 ScrollView拓展:上拉、下拉及List的拓展