##概述
本文将对2个方面进行开发讲解和接口调用分别对短链接WebApi
和长连接WebSocket
进行简要解说
开发必备技能 基本的HTTP原理 以及HTPP 的GET和POST请求
##安装WebAPi测试插件
·下载仓库中的 WebAPi.json
接口文档和Restlet Client - REST API Testing.crx
插件导入到Chrome浏览器中
·插件布局如下:
·每个接口都有详细的参数说明 不要上来就问有没有xxx功能,能不能怎样xxx,你想如何如何...请您搭建好食用后在提问补充。多发issus提问提Bug
例子🌰:以如何通过WebApi给好友发送消息为例
请求方式HTTP POST
POST地址 http://127.0.0.1:8888/v1/LuaApiCaller?qq=123456789&funcname=SendMsg&timeout=10
POST数据 {"toUser":1700487478,"sendToType":1,"sendMsgType":"TextMsg","content":"你好","groupid":0,"atUser":0,"replayInfo":null}
其中POST地址 qq=为所操作的QQ号理解为框架登录的QQ机器人也可以
funcname=参数为LuaAPi函数名所有APi可在WebPlugins
目录下Api_LuaCaller.lua
查看 以及WebApi插件接口列表中查看
新手Api_LuaCaller.lua
此文件 此文件包含了WebApi 所有的约定 改错就全废 当然你可以通过此文件查看插件中LuaApi 的调用方式以及参数说明 🈲️文件名不可更改 文件内容已实现自动热重载
POST数据为JSON类型
--组建参数 table
toUser --欲发给的对象 群或QQ好友或私聊对象 整数型
sendToType --发送消息对象的类型 1好友 2群3私聊 整数型
sendMsgType -- 欲发送消息的类型 "TextMsg","JsonMsg","XmlMsg","ReplayMsg" ,"TeXiaoTextMsg","PicMsg","VoiceMsg","PhoneMsg" 文本型
groupid -- 发送私聊消息是 在此传入群ID 其他情况为0 整数型
content -- 发送的文本内容
atUser -- At用户 �传入用户的QQ号 其他情况为0 整数类型 (不支持多人@)
replayInfo --回复类型数据结构
这样就完成了 通过WebApi 给好友/群/私聊发送消息 更详细的字段介绍请看WebApi插件列表
和 Api_LuaCaller.lua
##通过WebSocket 实现时时消息和相关事件接收
这里来说说如何通过长连接WebSocket来对接 说WebSocket不如说SocketIO、SocketIO 是对Websocket的进一步实现 实现了事件的监听以及Ack应答等机制 仓库中以给出c#和js的相关源码
对接成功后你就可以实现自己的框架咯使用自己熟悉的语言开发 插件等 完全脱离Lua(除非不想跨平台) 通过长连接收消息收事件 通过短链接WebApi调用功能 简直是饕餮盛宴 一个字 香! emm...
c# 直接下载仓库中的源码到本地运行
static void Main(string[] args)
{
socket = new Client("http://127.0.0.1:8888/");//连接框架中的服务地址
socket.Opened += SocketOpened;//绑定打开事件
socket.Message += SocketMessage;//绑定消息事件
socket.SocketConnectionClosed += SocketConnectionClosed;//绑定连接断开事件
socket.Error += SocketError;
socket.Connect();
string QQ = "123456789";//框架在线的QQ号
// register for 'connect' event with io server
socket.On("connect", (fn) =>
{
Console.WriteLine(((ConnectMessage)fn).ConnectMsg);
//重连成功 取得 在线QQ的websocket 链接connid
//Ack
socket.Emit("GetWebConn", QQ, null, (callback) =>
{
var jsonMsg = callback as string;
Console.WriteLine(string.Format("callback [root].[messageAck]: {0} \r\n", jsonMsg));
}
);
//获取已登录QQ的群列表
//socket.Emit("GetGroupList", QQ);
//获取已登录QQ的好友列表
//socket.Emit("GetQQUserList", QQ);
//获取已登录QQ的群123456789成员列表
//
//string JSON = "{" + string.Format("\"Uid\":\"{0}\",\"Group\":{1}", QQ, 123456789) + "}";
//socket.Emit("GetGroupUserList", JSON.Replace("\"", "\\\""));//json 需要处理一下转义
//获取登录二维码
socket.Emit("GetQrcode", "", null, (callback) =>
{
var jsonMsg = callback as string;
Console.WriteLine(string.Format("GetQrcode From Websocket: {0} \r\n", jsonMsg));
}
);
});
//二维码检测事件
socket.On("OnCheckLoginQrcode", (fn) =>
{
Console.WriteLine("OnCheckLoginQrcode\n" + ((JSONMessage)fn).MessageText);
});
//收到群消息的回调事件
socket.On("OnGroupMsgs", (fn) =>
{
Console.WriteLine("OnGroupMsgs\n" + ((JSONMessage)fn).MessageText);
});
//收到好友消息的回调事件
socket.On("OnFriendMsgs", (fn) =>
{
Console.WriteLine("OnFriendMsgs\n" + ((JSONMessage)fn).MessageText);
});
//获取群成员的回调事件
socket.On("OnGroupUserList", (fn) =>
{
Console.WriteLine("OnGroupUserList\n" + ((JSONMessage)fn).MessageText);
});
//获取群列表的回调事件
socket.On("OnGroupList", (fn) =>
{
Console.WriteLine("OnGroupList\n" + ((JSONMessage)fn).MessageText);
});
//获取好友列表的回调事件
socket.On("OnQQUserList", (fn) =>
{
Console.WriteLine("OnQQUserList\n" + ((JSONMessage)fn).MessageText);
});
//统一事件管理如好友进群事件 好友请求事件 退群等事件集合
socket.On("OnEvents", (fn) =>
{
Console.WriteLine("OnEnevts\n" + ((JSONMessage)fn).MessageText);
});
// make the socket.io connection
Console.ReadLine();
}
static void SocketOpened(object sender, EventArgs e)
{
Console.WriteLine("SocketOpened\r\n");
}
static void SocketError(object sender, ErrorEventArgs e)
{
Console.WriteLine("socket client error:");
Console.WriteLine(e.Message);
}
static void SocketConnectionClosed(object sender, EventArgs e)
{
Console.WriteLine("WebSocketConnection was terminated!");
}
static void SocketMessage(object sender, MessageEventArgs e)
{
// uncomment to show any non-registered messages
if (string.IsNullOrEmpty(e.Message.Event))
Console.WriteLine("Generic SocketMessage: {0}", e.Message.MessageText);
else
Console.WriteLine("Generic SocketMessage: {0} : {1}", e.Message.Event, e.Message.Json.ToJsonString());
}
//释放连接等操作
public static void Close()
{
if (socket != null)
{
socket.Opened -= SocketOpened;
socket.Message -= SocketMessage;
socket.SocketConnectionClosed -= SocketConnectionClosed;
socket.Error -= SocketError;
socket.Dispose(); // close & dispose of socket client
}
}
JS的代码我就不贴出来了emm 看仓库 食用
欢迎贡献你的Code