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