GM爱好者

 找回密码
 立即注册

在线
客服

在线客服服务时间: 10:00-20:00{不定期回复}

选择下列客服马上在线沟通:

快速
发帖

客服
热线

290016403
7*24小时客服服务热线

关注
微信

关注Q群二维码
顶部
查看: 855|回复: 16

[其他教程] 传奇客户端微端分析

[复制链接]
等级头衔

等級:郡王

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
精华
0
G币
0
主题
39
帖子
483
金币
5681

建功勋章

最佳新人活跃会员

发表于 2022-8-8 05:06:36 | 显示全部楼层 |阅读模式

马上注册 立即下载

您需要 登录 才可以下载或查看,没有账号?立即注册

x
核心单元PatchUnit
就两个类

TPatchClientManager 管理类并维护一个m_xObjectListT(PatchClient)
负责初始化socket 和 发送资源请求
并在ProcOnIdle 执行 ExecSendBuffer ExecRecvBuffer
AssignedWMImages 用于存储服务端发送的wzl清单

/////////////////////////////////////

TPatchClient 实际的数据收发操作
m_ClientSocket: TClientSocket; 客户端socket
构造函数传递了一个TPatchClientManager对象
此函数处理接收的socket数据
ProcRecvBuffer 处理接收数据分析(pMsgHeader)并通过
AddProcRecvMsg添加到list(m_xProcRecvList) 交由ExecRecvBuffer处理

------------------------------------------
TPatchData 消息包格式
----------------------------------------

//////////////////////////////////////////////////////////////////////////////////

ExecSendBuffer //需要判断是否是第一次链接m_fFirstGetCrc
激活socket 从m_xTempProcSendList取出请求 发送数据请求
前段分析 实际是把请求的消息添加到m_xProcSendList
后段 从m_xProcSendList取出判断pPatchData.dwDelay 超时就删除请求
取出成功后分配内存 m_ClientSocket.Socket.SendBuf 发送请求
超时的交由end else begin
m_ClientSocket.Socket.SendBuf(PatchData.tHdr, SizeOf(TMsgHeader)); //可能是重新请求?

-----------------------------------------

ExecRecvBuffer
从m_xProcRecvList取出数据
成功后 后面分析包
PM_CRC //crc返回 m_fFirstGetCrc 为真 //首包? 并获取整个资源列表
前段 判断全部为空 清理所有请求的消息列表
获取的列表格式 wzl为单个图片
wzl/wav/map
wzl 文件之间 | 分割其它类似 wzl,crc 逗号分隔
校验通过
按请求的图片
m_PatchClientManager.m_xWMImageList.IndexOf(szFileName)
放入m_nSvrWzlFileList(文件名,图片序号)
wav map类似 只不过是整个文件

-------------------------------------------------------

接下来向服务端返回本地校验?后来发现是个半成品。。
PatchData.tHdr.nSocket CRC文件数量
CnCRC32.FileCRC32(ParamStr(0), dwCRC); mir2.exe的crc

-------------------------------------------------------

PM_INDEX
校验通过将打开wzl wzx文件
同时更新本地图片计数 和服务器一致
PM_DATA解析具体数据

////////////////////////////////////////////////////////

SendProcMsg 发送请求包下载数据 map wzl wav直接的请求函数调用这个就行了
首次请求 消息加入m_xTempProcSendList
然后按类型文件名读取crc
通过CRC(pPatchData.tHdr.nSocket)
再次请求具体数据 消息加入m_xProcSendList
///////////////////////////////////////////
等级头衔

等級:从事

Rank: 9Rank: 9Rank: 9

积分成就
精华
0
G币
0
主题
0
帖子
604
金币
1743

建功勋章

最佳新人活跃会员

发表于 2022-9-4 23:03:37 | 显示全部楼层
努力赚币中。。。
等级头衔

等級:郡王

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
精华
0
G币
0
主题
46
帖子
688
金币
10368

建功勋章

最佳新人活跃会员

发表于 2022-9-10 01:12:04 | 显示全部楼层
感谢楼主的无私分享!要想GM爱好者:www.gmahz.com好 就靠你我他
等级头衔

等級:郡守

Rank: 13Rank: 13Rank: 13Rank: 13

积分成就
精华
0
G币
0
主题
33
帖子
496
金币
5996

建功勋章

最佳新人活跃会员

发表于 2022-9-10 01:12:05 | 显示全部楼层
金币我要攒金币!!!
等级头衔

等級:郡守

Rank: 13Rank: 13Rank: 13Rank: 13

积分成就
精华
0
G币
0
主题
34
帖子
460
金币
5557

建功勋章

最佳新人活跃会员

发表于 2022-9-10 05:45:05 | 显示全部楼层
楼主,大恩不言谢了!GM爱好者:www.gmahz.com是最棒的!
等级头衔

等級:郡王

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
精华
0
G币
0
主题
38
帖子
488
金币
5878

建功勋章

最佳新人活跃会员

发表于 2022-9-14 01:36:01 | 显示全部楼层
楼主太厉害了!楼主,I*老*虎*U!我觉得GM爱好者:www.gmahz.com真是个好地方
等级头衔

等級:什长

Rank: 3Rank: 3Rank: 3

积分成就
精华
0
G币
0
主题
0
帖子
82
金币
843

建功勋章

发表于 2022-9-14 01:36:04 | 显示全部楼层
楼主,我太崇拜你了!我想我是一天也不能离开GM爱好者:www.gmahz.com
等级头衔

等級:郡王

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
精华
0
G币
0
主题
45
帖子
1020
金币
6654

建功勋章

热心会员灌水之王最佳新人活跃会员

发表于 2022-9-14 08:46:04 | 显示全部楼层
拿币走人。。。。
等级头衔

等級:钻石会员

Rank: 43Rank: 43Rank: 43Rank: 43Rank: 43Rank: 43Rank: 43

积分成就
精华
0
G币
0
主题
38
帖子
1023
金币
10385

建功勋章

突出贡献论坛元老

发表于 2022-9-23 10:24:56 | 显示全部楼层
这个帖子不回对不起自己!我想我是一天也不能离开GM爱好者:www.gmahz.com
等级头衔

等級:从事

Rank: 9Rank: 9Rank: 9

积分成就
精华
0
G币
0
主题
0
帖子
590
金币
1855

建功勋章

最佳新人活跃会员

发表于 2022-9-27 01:06:19 | 显示全部楼层
这东西我收了!谢谢楼主!GM爱好者:www.gmahz.com真好!
*滑块验证:
懒得打字嘛,点击右侧快捷回复 【GM爱好者:www.gmahz.com】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|小黑屋|GM爱好者 ( 赣ICP备20009465号-1 )|网站地图

GMT+8, 2025-5-3 01:26 , Processed in 1.180920 second(s), 41 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表