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事件