FunGame.Core
需要配合Milimoe.FunGame.Core.Library.Constant.DataRequestType使用
确保已添加对应的枚举
数据请求结果
详细错误信息
私有的实现类
基于本地已连接的 创建新的数据请求
使用 中的 创建一个新的请求
添加数据
长时间运行的数据请求需要在使用完毕后自行关闭
向服务器发送数据请求
异步向服务器发送数据请求
获取指定key对应的反序列化对象
反序列化Hashtable中的Json对象
邮件服务内部ID
Smtp客户端信息
上一个邮件发送的结果
上一个邮件的发送错误信息(如果发送失败)
内部变量
创建邮件服务
创建完整邮件对象
发送邮件
关闭邮件服务
关闭邮件服务
需要在Server中继承此类实现
执行一个命令
影响的行数
执行一个指定的命令
命令
影响的行数
查询DataSet
结果集
执行指定的命令查询DataSet
命令
结果集
执行指定的命令查询DataRow(可选实现)
结果行
执行指定的命令查询DataRow(可选实现)
命令
结果行
关闭连接
创建一个SQL事务
提交事务
回滚事务
数据请求结果
详细错误信息
私有的实现类
基于本地已连接的 创建新的数据请求
添加数据
向服务器发送数据请求
异步向服务器发送数据请求
获取指定key对应的反序列化对象
反序列化Hashtable中的Json对象
获取角色实例
获取库存实例
获取物品实例,默认返回Passiveitem 被动物品 需要强制转换
Item类型 主动 或 被动
获取主动物品实例
获取被动物品实例
获取房间实例
房间内部序列号
房间号
创建时间
房主
房间类型
游戏模组
房间状态
房间密码
通过DataSet获取房间实例
通过DataSet获取房间列表
获取大厅(-1号房)
获取技能实例,默认返回PassiveSkill 被动技能 需要强制转换
Skill类型 主动 或 被动
获取主动技能实例
获取被动技能实例
获取用户实例
获取用户实例
获取用户实例
获取用户实例
适用于客户端的模组集
适用于服务器的模组集
游戏地图集
角色表
技能表
物品表
传入 类型来创建指定端的模组读取器
runtime = 时,仅读取
runtime = 时,仅读取
都会读取
传入 类型来创建指定端的模组读取器
用于构建
其他需要传入给插件初始化的对象
获取对应名称的模组实例
如果需要取得服务器模组的实例,请调用
获取对应名称的服务器模组实例
获取对应名称的游戏地图
网络服务工具箱
判断字符串是否是IP地址
判断字符串是否为邮箱地址
判断字符串是否是正常的用户名(只有中英文和数字)
获取用户名长度
判断字符串是否是一个FunGame可接受的服务器地址
此方法可以解析域名
返回地址验证结果,同时输出服务器地址和端口号
判断参数是否是一个FunGame可接受的服务器地址
获取服务器的延迟
服务器IP地址
解析域名为IP地址
返回目标对象的Json字符串
返回目标对象的Json字符串 可指定反序列化选项
反序列化Json对象
反序列化Json对象 可指定反序列化选项
反序列化Hashtable中的Json对象
反序列化IEnumerable中的Json对象
反序列化IEnumerable中的Json对象 可指定反序列化选项
反序列化Hashtable中的Json对象 可指定反序列化选项
时间服务工具箱
获取系统时间
格式化类型
通过字符串转换为DateTime对象
时间字符串
转换失败返回当前时间
获取系统时间并转为字符串
格式化类型
获取系统时间并转为字符串
格式化字符串
获取系统短时间
时:分:秒
获取系统日期
使用HMACSHA512算法加密
使用HMACSHA512算法加密
需要加密的值
秘钥
使用RSA算法加密
明文
公钥
使用RSA算法解密
密文
私钥
使用HMACSHA512算法加密
需要加密的值
秘钥
生成验证码
类型
长度
数字验证码
字母验证码
混合验证码
开启一个任务:调用返回对象的OnCompleted()方法可以执行后续操作,支持异步
开启一个任务:调用返回对象的OnCompleted()方法可以执行后续操作,支持异步
开启一个计时器任务
See: , ,
获取FunGame.Implement.dll中接口的实现方法
程序集
接口代号
获取接口实现类类名
接口类型
获取接口方法名(支持属性)
方法
公开方法:获取FunGame.Implement.DLL中指定方法(属性)的返回值
接口代号
方法代号(支持属性)
是否是方法(如是属性请传入false)
创建一个Json工具类
此工具类拥有单独的序列化选项,支持添加自定义转换器
继承自
序列化选项
已经默认添加了下列转换器:
, ,
注册一个自定义转换器,支持
注册多个自定义转换器,支持
获取Json字符串
反序列化Json对象
反序列化Json对象,此方法可能无法返回正确的类型,请注意辨别
反序列化Hashtable中Key对应的Json对象
反序列化IEnumerable中的Json对象 可指定反序列化选项
反序列化多个Json对象
注意必须是相同的Json对象才可以使用此方法解析
Private JsonSerializerOptions
简易的插件配置文件生成器
仅支持部分基本类型(, , , )及其数组(List<long>, List<decimal>, List<string>, List<bool>和long[], decimal[], string[], bool[])
文件会保存为:程序目录/configs//.json
新建一个配置文件,文件会保存为:程序目录/configs//.json
简易的插件配置文件生成器
仅支持部分基本类型(, , , )及其数组(List<long>, List<decimal>, List<string>, List<bool>和long[], decimal[], string[], bool[])
文件会保存为:程序目录/configs//.json
新建一个配置文件,文件会保存为:程序目录/configs//.json
插件的名称
配置文件的名称(后缀将是.json)
使用索引器给指定key赋值,不存在key会新增
如果保存了对象,请使用此方法转换
获取指定key的value
使用泛型获取指定key的value
添加一个配置,如果已存在key会覆盖
从配置文件中读取配置。
注意:所有保存时为数组的对象都会变成对象,并且不支持类型
将配置保存到配置文件。调用此方法会覆盖原有的.json,请注意备份
Json反序列化的方法
Json数组反序列化的方法。不支持数组。
已读取的插件列表
key 是
构建一个插件读取器并读取插件
用于构建
其他需要传入给插件初始化的对象
单例表:表中的对象以类名作为Key保存,并以Key获取该对象,Key具有唯一约束
用于储存单例对象使用
查询目标的类是否已经有实例
单例对象
将目标和目标的类添加至单例表
单例对象
添加单例到单例表时遇到错误
将目标和目标的类从单例表中移除
单例对象
获取单例对象
目标类
不能从单例表中获取到指定的单例
获取单例对象
目标类
不能从单例表中获取到指定的单例
默认的配置文件名称
写入ini文件
Section
键
值
文件名,缺省为FunGame.ini
读取ini文件
Section
键
文件名,缺省为FunGame.ini
读取到的值
查询ini文件是否存在
文件名,缺省为FunGame.ini
是否存在
初始化ini模板文件
读取TXT文件内容
文件名
相对路径
内容
写入TXT文件内容(如不存在文件会创建,反之新起一行追加)
文件名
相对路径
内容
追加错误日志 默认写入logs文件夹下的当日日期.log文件
Aka. 2FA 双重认证 双因素身份验证
SQLHelper 允许为空
不使用SQL模式
使用SQL模式 记录对应账号的密文到数据库中
检查账号是否需要2FA
2FA验证
每30秒刷新
6位数字2FA验证码
----- PUBLIC KEY -----
----- SECRET SIGN -----
创键私钥,用于绑定账号,并生成两个文件,需要用户保存
生成随机秘钥字符串
生成基于当前时间戳的6位数字2FA验证码
获取当前时间节点
生成验证码
拆分字符串中的密文和私钥
这个控制器在Base的基础上添加了DataRequest
基于本地已连接的Socket创建新的数据请求
基于本地已连接的Socket创建长时间运行的数据请求
基于本地已连接的Socket创建新的数据请求
基于本地已连接的Socket创建长时间运行的数据请求
新建一个AddonController
这是通用的控制器,仅提供基本功能
Addon的类型,如或者
控制器的本体
输出系统消息
输出错误消息
输出系统消息
输出错误消息
新建一个BaseAddonController
默认的输出错误消息方法
输出错误消息
此类实现服务器连接、断开连接、心跳检测、创建数据请求等功能
-- 需要继承并实现部分方法 --
与服务器的连接套接字实例
套接字是否已经连接
接收服务器信息的线程
用于类内赋值
是否正在接收服务器信息
断开服务器连接
发送结束游戏反馈
连接服务器
获取服务器地址
string:IP地址;int:端口号
此方法将在连接服务器前触发
客户端可以重写此方法
服务器IP
服务器端口
重写时可以提供额外的连接参数
false:中止连接
此方法将在连接服务器后触发(Connect结果返回前)
客户端可以重写此方法
连接服务器后返回的一些数据,可以使用也可以修改它们
客户端需要自行实现自动登录的事务
关闭所有连接
输出消息
自定处理异常的方法
-- 一般放在catch中 --
基于本地已连接的Socket创建新的数据请求
基于本地已连接的Socket创建长时间运行的数据请求
开始接收服务器信息
获取服务器已发送的信息为SocketObject数组
具体接收服务器信息以及处理信息的方法
客户端接收服务器断开连接的通知
客户端接收并处理服务器系统消息
客户端接收并处理服务器心跳
客户端接收强制退出登录的通知
客户端接收并处理聊天信息
客户端接收并处理更换房主信息
客户端接收并处理匹配房间成功信息
客户端接收并处理开始游戏信息
客户端接收并处理游戏结束信息
客户端接收并处理局内消息
继承 AsyncAwaiter 用法:
1、调用Socket.Send()前,请设置为等待状态:SetWorking();
2、调用Socket.Send() == Success后,请等待任务完成:WaitForWorkDone();
3、在其他任何地方修改Working状态,均会使任务终止。
接收到的SocketObject实例
Socket
继承请调用base构造
Socket
继承请重写此方法
SocketObject
判断是否已经Disposed
公开的Dispose方法
关闭时
关闭事件
Controller关闭时事件
不建议new Dispose()方法,建议使用事件
事件会在base.Dispose()执行前触发
触发关闭事件
记录 的生涯、赛季统计数据
Key为赛季(long),每个key代表第key赛季,key = 0时为生涯数据。
服务器实例是否在运行
客户端的套接字实例
客户端的用户实例,在用户登录后有效
客户端的名称,默认是客户端的IP地址
客户端是否启动了开发者模式
向客户端发送消息
向客户端发送系统消息
获取客户端的名称,通常未登录时显示为客户端的IP地址,登录后显示为账号名
开始接收客户端消息
请勿在 中调用此方法
启动对客户端的监听
请勿在 中调用此方法
窗体继承这些接口便能实现事件,或为插件预留。
局内事件的接口,与 配套使用
这是最基本的接口,要求客户端实现
服务器需要实现此接口
模组名称
模组描述
模组版本
模组作者
此模组中包含的角色
加载标记
加载模组
模组加载后需要做的事
允许返回false来阻止加载此模组
建议使用一个类来存储常量,方便重用
模组:必须继承基类:
继承事件接口并实现其方法来使模组生效。例如继承:
模组服务器:必须继承基类:
使用switch块分类处理 。
地图:必须继承基类:
必须继承基类:
继承事件接口并实现其方法来使插件生效。例如继承:
地图名称
地图描述
地图版本
地图作者
宽度
高度
格子大小
加载标记
加载地图
加载后需要做的事
允许返回false来阻止加载此地图
模组名称
模组描述
模组版本
模组作者
默认地图
模组的依赖集合
适用的房间模式
包含了一些常用方法的控制器
base控制器,没有DataRequest
控制器内部变量
必须重写此方法,游戏的主要逻辑写在这里面
此方法会在 时调用
如模组有界面,请重写此方法
加载标记
加载模组
模组加载后需要做的事
允许返回false来阻止加载此模组
传递委托以便让模组调用
Session对象
Config对象
绑定事件。在后触发
模组的依赖集合
模组的依赖集合
模组所使用的地图组
模组所使用的角色组
模组所使用的物品组
模组所使用的技能组
模组名称
模组描述
模组版本
模组作者
默认地图
模组的依赖集合
包含了一些常用方法的控制器
控制器内部变量
启动服务器监听 请在此处实现服务器逻辑
接收并处理GamingMessage
发送此消息的账号
消息类型
消息参数
底层会将哈希表中的数据发送给客户端
加载标记
加载模组
模组加载后需要做的事
允许返回false来阻止加载此模组
模组名称
模组描述
模组版本
模组作者
此模组中包含的物品
加载标记
加载模组
模组加载后需要做的事
允许返回false来阻止加载此模组
插件名称
插件描述
插件版本
插件作者
包含了一些常用方法的控制器
base控制器,没有DataRequest
控制器内部变量
加载标记
加载插件
插件加载后需要做的事
允许返回false来阻止加载此插件
传递委托以便让插件调用
Session对象
Config对象
绑定事件。在后触发
模组名称
模组描述
模组版本
模组作者
此模组中包含的技能
加载标记
加载模组
模组加载后需要做的事
允许返回false来阻止加载此模组
继承这个类可以获得异步等待的功能
参考实现
接收到的实例
是否处于等待的状态
异步操作前,请设置为等待状态
等待任务完成(需要自己异步)
异步等待任务完成
任务的等待器,可以设置在任务完成后需要的操作
任务是否完成
捕获到的异常
内部实现类
实现参见
构造一个等待器
返回TaskAwaiter可以连续的调用方法
但是意义不大,前一个OnCompleted方法并不会等待下一个方法
可以理解为并行广播
在捕获到异常时,将触发Error事件
发件人邮箱
发件人名称
邮件主题
邮件内容
邮件优先级
内容是否支持HTML
收件人列表
抄送列表
密送列表
使用MailSender工具类创建邮件对象
使用地址和名称创建邮件对象
使用地址和名称创建邮件对象,同时写主题、内容、单个收件人
使用地址和名称创建邮件对象,同时写主题、内容、单个收件人、单个抄送
完整的创建邮件对象
发送邮件
-- 适合创建一次性邮件并发送 --
添加收件人
添加多个收件人
添加抄送
添加多个抄送
添加密送
添加多个密送
从参数列表中获取指定类型和索引的参数
类型
索引
类型的参数
索引超过数组上限
配合 使用,也别忘了修改
需要同步更新
将通信类型的枚举转换为字符串
通信类型
等效字符串
需要同步更新
RunTime
Main
Register
Login
Room
Gaming
获取Type的等效字符串
获取Type的等效字符串
获取Type的等效字符串
获取字符串对应的枚举
添加-debug启动项将开启DebugMode(仅适用于Desktop或Console)
目前支持禁用心跳检测功能
此类保存常用的对象常量
空的实体类 用于object返回
默认的未知用户
游客用户
本地用户
大厅(空房间)实例
默认的字符编码
默认的时间格式
默认的时间值(1970年8月1日8点0分0秒)
最多自动重试连接次数
1C2G推荐的任务数量
2C2G推荐的任务数量
4C4G推荐的任务数量
默认Socket数据包大小
默认Stream传输大小
配合 使用,也别忘了修改
配合 使用,也别忘了修改
配合 使用
需要同步更新
需要同步更新
需要同步更新
Commands
是否自动连接服务器
是否自动登录
是否在匹配中
是否连接上服务器
是否正在重连
是否自动重连
是否在房间中
当前所处的房间类型
服务器名称
公告
自动登录的账号
自动登录的密码
自动登录的秘钥
游戏局内类
客户端需要使用创建此类单例
使用的模组实例
游戏的参数
传入游戏所需的参数,构造一个Gaming实例
需在RunTimeController的SocketHandler_Gaming方法中调用此方法
客户端也可以参照此方法自行实现
此方法目的是为了触发 的局内事件实现
消息类型
接收到的数据
底层会将哈希表中的数据发送给服务器
服务器地址
服务器端口号
SocketToken
LoginKey
已登录的用户
已登录用户名
所处的房间
从plugins目录加载所有插件
从modules目录加载所有模组
从modules目录加载所有适用于服务器的模组
从maps目录加载所有地图
默认的序列化选项
获取Json字符串
获取Json字符串
反序列化Json对象
反序列化Json对象
反序列化Json对象,此方法可能无法返回正确的类型,请注意辨别
反序列化Json对象,此方法可能无法返回正确的类型,请注意辨别
反序列化SocketObject中索引为index的Json对象
反序列化Hashtable中Key对应的Json对象
反序列化IEnumerable中的Json对象
反序列化IEnumerable中的Json对象
反序列化Hashtable中Key对应的Json对象
反序列化多个Json对象
注意必须是相同的Json对象才可以使用此方法解析
反序列化多个Json对象
注意必须是相同的Json对象才可以使用此方法解析
检查字符串是否为完整的JSON对象
用于保存Smtp客户端
一个邮件服务对应一个Smtp客户端
用于保存邮件服务
允许服务器同时存在多个服务
获取某个已经保存过的邮件服务
统一调用此方法发送邮件
关闭邮件服务
目前的Model数量
最大接受的Model数量
可参与高并发的字典,但添加效率较低
Init ModelManager
MaxModel
获取Model对象
Model的Key
Model对象
向Model管理器中添加Model
Model的Key
Model对象
True:操作成功
从Model管理器中移除Model
Model的Key
True:操作成功
将Model移除,并取得这个Model
Model的Key
Model对象
被移除的Model
将Model移除,并取得这个Model
Model的Key
被移除的Model
清空Model管理器
获取Model对象的列表
客户端专用Socket
服务器端专用Socket
创建服务器监听Socket
监听端口号
最大连接数量
服务器端专用Socket
创建一个监听到客户端Socket
客户端IP地址[0]和客户端Socket[1]
创建客户端Socket
服务器IP地址
服务器监听端口
客户端专用Socket
用于服务器端向客户端Socket发送信息
客户端Socket
Socket信息容器
通信结果
用于客户端向服务器Socket发送信息
Socket信息容器
通信结果
接收数据流中的信息
如果是服务器接收信息需要传入客户端Socket
如果是服务器接收信息需要传入客户端Socket
SocketObjects
监听事件的委托
SocketObject
监听事件
触发异步监听事件
SocketObject
开启一个任务:调用返回对象的OnCompleted()方法可以执行后续操作,支持异步
开启一个任务:调用返回对象的OnCompleted()方法可以执行后续操作,支持异步
内部实现类
返回ITaskAwaiter可以进一步调用方法
但是意义不大,前一个OnCompleted方法并不会等待下一个方法
可以理解为并行广播
在捕获到异常时,将触发Error事件