YCC Trainer – Yahoo! Messenger 教程






4.64/5 (10投票s)
YCC Trainer 是一个示例应用程序,
引言
YCC Trainer 旨在教授编写自己的 Yahoo! Messenger 客户端所需的逻辑。YCC Trainer 面向经验较少或中等水平的程序员,并要求其理解 .NET 语言。YCC Trainer 使用 Visual Basic .NET 2005 编写,是 Yahoo! Coder's Cookbook ( www.ycoderscookbook.com ) 的一个大型项目的一部分,该项目旨在教您关于 Yahoo! Messenger 协议的一切知识。YCC Trainer 使用的 Yahoo! Messenger 协议版本为 15。
YCC Trainer 程序结构
YCC Trainer 目前包含两个不同的项目:前端 GUI 和后端协议引擎。后端被设计成分离于 GUI,可用于任何数量的任务。由于 YCC Trainer 的目标是展示 Yahoo! Messenger 协议的工作原理,我将主要关注名为 YCC_YMSG_Functions
的后端。
YCC_YMSG_Functions
YCC_YMSG_Functions
包含四个模块:modUser
、modYFunctions
、modByteFunctions
和 modSockets
。唯一需要访问的模块是 modUser,因为所有状态数据、函数调用和事件都驻留在该模块中。
YCC_YMSG_Functions
中的所有高级通信都包含在一个名为 uPacket
的结构中。uPacket
包含所有头部信息和有效载荷,是一个易于访问的结构,无需手动解析信息。将数据包转换为原始字节数据以及反之的过程包含在 modYFunctions
中。发送 YMSG 消息时,应调用 modYFunctions.PacketToByte
;接收 YMSG 消息时,应通过调用 modYFunctions.ByteToPacket
将其转换为 uPacket
。第三个模块 modByteFunctions
包含用于字节操作的方法,例如字节连接,这在 YCC_YMSG_Functions
中广泛使用。最后,modSockets
是网络接口模块,负责将字节数据转换为异步 Windows API 套接字。
由于 Yahoo! Messenger 协议中的通信是异步的,数据可以独立且随时发送和接收。要发送数据,只需调用 modUsers
中相应的函数。接收数据更复杂,但由 socket_receive
和 modUser_ProcessPacket
函数处理。socket_receive
处理 YMSG 数据包可能包含的所有特殊情况,而 modUser_ProcessPacket
则针对特定的 YMSG 服务采取行动。
创建 GUI
创建 modUser
前端的第一步是创建 YCC_YMSG_Functions
的新实例。完成此操作后,调用 modUser.Login
。在这种情况下,Login
可以被视为 New
函数,因为它初始化了 YCC_YMSG_Functions
的实例,使其准备好完全运行。Login
函数也很特别,因为它启动了验证用户 against Yahoo! 服务器所需的数据包序列。一旦 AuthResp
数据包被正确发送,您就可以认为您的用户已成功登录 Yahoo!
Dim yUser As New YCC_YMSG_Functions.modUser
Dim UserData As New YCC_YMSG_Functions.modUser.uUserData
Dim ServerData As New YCC_YMSG_Functions.modUser.uServerData
_YUser = yUser
AddHandler yUser.PacketRecieved, AddressOf debug.modUser_PacketRecieved
AddHandler yUser.PacketSent, AddressOf debug.modUser_PacketSent
AddHandler yUser.LoginFail, AddressOf yUser_LoginFail
AddHandler yUser.NewMail, AddressOf yUser_NewMail
AddHandler yUser.BuddyListUpdate, AddressOf yUser_BuddyListUpdate
AddHandler yUser.ErrorMessage, AddressOf yUser_ErrorMessage
AddHandler yUser.MessageRecieve, AddressOf yUser_MessageRecieve
AddHandler yUser.NotifyRecieve, AddressOf yUser_NotifyRecieve
'Set the user data here such as server, port, etc.
yUser.Login(UserData, ServerData)
在创建 yUser
的新实例时,还应为 modUser
可能触发的许多事件添加处理程序。其中一些包括 LogonSuccess
、LogonFail
、BuddyListUpdate
和 NewMail
。
主页
YCC Trainer 和许多其他有用程序都托管在 Yahoo! Coder's Cookbook ( http://ycoderscookbook.com )。 http://ycoderscookbook.com/YCC_Trainer.htm 是 YCC Trainer 的主页,论坛位于 http://ycoderscookbook.com/forums。Yahoo! Coder's Cookbook 还提供了一个完整的教程部分,解释了 Yahoo! Messenger 协议的大部分内容,一个定期更新的博客,Messenger 的其他代码示例,等等。
历史
1.0.0.1
- 它现在将完全登录。
AuthResp
期间的编程错误未能正确处理响应挑战字符串 - 使用 YMSG 协议版本 15
- 新的程序结构。高级数据单位现在是
uPacket
- 可以处理 TCP 数据包内的多个 YMSG 数据包
- 可以处理跨越多个 TCP 数据包的 YMSG 消息
- 好友列表已正确实现
- 单独的忽略列表
- 隐身登录
- 基本消息处理和通知消息
- 一些实验性过程。目前没有值得报告的有趣内容
- 还有很多,但这些是主要的修复
1.0.0.0
- 首次发布
待办事项
- 目前调试窗口应视为损坏。它完成了最基本的工作,但我在演示文稿方面还有很多工作要做。我还实现了一个自定义队列数据结构。默认大小为 25,我尚未测试过此限制。如果发送或接收的消息超过 25 条后崩溃,这很可能就是原因。
- 实现自定义数据包生成器
- 能够更新好友列表状态
- 添加、接受或删除好友
- 注销时存在一个错误。显然,服务器发送的是 **** 而不是 YMSG