|
技术点:
进程id
读写配置项
文件枚举
循环结构的应用
md5校验
每个软件启动的时候,系统会随机分配一个进程id,我们可以将当前的数据(账号,状态码等)与进程id进行绑定,如果进程id不存在,则说明该进程已退出,因此我们可以在登录成功的时候记录数据,软件初始化完成后清理数据
回到上一个问题
假设后台多开数设置为:10,现在7号程序(登录顺序为7)闪退掉线,在正常退出情况下,我们可以在程序退出的时候执行“退出函数”通知服务器后台,但是闪退的时候无法执行这个通知,这意味着后台的7号程序的状态码不会删除,后台认为7号程序依旧在线
当我们再登录一个程序的时候,这个程序在启动后会执行清理初始化,7号程序的进程id不存在,我们读取绑定的数据(账号,状态码等),执行退出指令,退出不成功弹出提示并结束软件
拓展:
但是这会存在一种极端情况,比如7号程序的进程id是:123,虽然7号程序已经闪退,但是我们又运行了一个新的程序,分配的进程id刚好也是:123
为了解决这个问题,我们可以判断md5
7号程序登录后,记录自身的md5到数据里,我们清理判断的时候,取当前进程123程序的md5,然后与记录值比较,不一样说明这个123不是7号程序,7号程序已经闪退,如此一来,多开问题就完美解决了
【源码-记录函数】(以易语言为例)
|
易游_多开配置_记录 | 逻辑型 | √ | |
程序名称 | 文本型 | | | | 用户名 | 文本型 | | | | 状态码 | 文本型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 数据目录 | 文本型 | | | 进程id | 整数型 | | | 数据路径 | 文本型 | | | 自身数据 | 字节集 | | | 自身数据md5 | 文本型 | | |
数据目录 = 取特定目录 (1 ) + “易游多开配置\” + 程序名称 + “\”目录_创建 (数据目录 )进程id = 进程_取自进程ID ()数据路径 = 数据目录 + 到文本 (进程id ) + “.dk”写配置项 (数据路径, “data”, “用户名”, 用户名 )写配置项 (数据路径, “data”, “状态码”, 文本_加密 (状态码, 程序名称 + 用户名 )) 自身数据 = 读入文件 (数据路径 )自身数据md5 = 校验_取md5 (自身数据 )写配置项 (数据路径, “data”, “md5”, 自身数据md5 ) 判断 (读配置项 (数据路径, “data”, “用户名”, “”) ≠ 用户名 ) 返回 (假)    判断 (读配置项 (数据路径, “data”, “状态码”, “”) ≠ 文本_加密 (状态码, 程序名称 + 用户名 )) 返回 (假)    判断 (读配置项 (数据路径, “data”, “md5”, “”) ≠ 自身数据md5 ) 返回 (假)   返回 (真)
【代码解析】
引入参数“程序名称”:
这是考虑了多个程序的情况,不同的程序名称代表不同的程序,退出地址也不相同,这是为了防止程序之间的登录数据互相影响
状态码加密:
状态码写出加密是防破解的操作,每一个细节都要做好
结构设计:
不同的程序名称对应不同的目录,每一次的登录数据则单独写出一个配置文件,账号、状态码等数据则存储在配置文件中
【源码-清理函数】(以易语言为例) |
易游_多开配置_清理 | 文本型 | √ | |
程序名称 | 文本型 | | | | 访问方式 | 整数型 | | | | 易游退出函数api地址 | 文本型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 数据目录 | 文本型 | | | 数据成员 | 文本型 | | 0 | 数据路径 | 文本型 | | | n | 整数型 | | | i | 整数型 | | | 进程id | 整数型 | | | 用户名 | 文本型 | | | 状态码 | 文本型 | | | 进程路径 | 文本型 | | | 进程数据 | 字节集 | | | 进程md5_当前值 | 文本型 | | | 进程md5_记录值 | 文本型 | | | 返回值 | 文本型 | | |
数据目录 = 取特定目录 (1 ) + “易游多开配置\” + 程序名称 + “\”n = 文件_枚举 (数据目录, “*.dk”, 数据成员, 真, , ) 计次循环首 (n, i ) 数据路径 = 数据成员  进程id = 到整数 (文件_取文件名 (数据路径 ))  判断 (进程_ID是否有效 (进程id ) = 假)  用户名 = 读配置项 (数据路径, “data”, “用户名”, “”)  状态码 = 读配置项 (数据路径, “data”, “状态码”, “”)  状态码 = 文本_解密 (状态码, 程序名称 + 用户名 )  返回值 = 易游_退出登录 (访问方式, 易游退出函数api地址, 状态码, 用户名 )     判断 (返回值 ≠ “1” 且 返回值 ≠ “-103”)      返回 (数据路径 )           文件_删除 (数据路径 )        进程路径 = 进程_PID取路径 (进程id )  进程数据 = 读入文件 (进程路径 )  进程md5_当前值 = 校验_取md5 (进程数据, , )  进程md5_记录值 = 读配置项 (数据路径, “data”, “md5”, “”)   判断 (进程md5_当前值 ≠ 进程md5_记录值 )   用户名 = 读配置项 (数据路径, “data”, “用户名”, “”)   状态码 = 读配置项 (数据路径, “data”, “状态码”, “”)   状态码 = 文本_解密 (状态码, 程序名称 + 用户名 )   返回值 = 易游_退出登录 (访问方式, 易游退出函数api地址, 状态码, 用户名 )   判断 (返回值 ≠ “1” 且 返回值 ≠ “-103”)   返回 (数据路径 )          
  文件_删除 (数据路径 )            计次循环尾 ()返回 (“”)
【代码解析】
清理函数通过文件枚举的方法得到程序目录下的文件数据,文件名就是进程id,判断进程id是否存在
如果不存在,则执行退出函数
如果存在,则判断当前进程的md5与记录值md5是否相等,不相等,说明程序已闪退,后面又运行了某个程序,两者id恰好相同,需要执行退出函数
返回:【多开配置框架-总览】
|
|