Click here to Skip to main content
Click here to Skip to main content

YCC Trainer – Tutorial for Yahoo! Messenger

By , 21 May 2007
 

Screenshot - YCC_Trainer_main.gif

Introduction

YCC Trainer is designed to teach the logic needed to make your own Yahoo! Messenger client. YCC Trainer is geared towards programmers with little to moderate experience and an understanding of the .NET languages. YCC Trainer is written in Visual Basic .NET 2005 and is part of a larger project at Yahoo! Coder's Cookbook (www.ycoderscookbook.com) intended to teach you everything you need to know about the Yahoo! Messenger protocol. The Yahoo! Messenger protocol version used by YCC Trainer is 15.

YCC Trainer Program Structure

YCC Trainer currently consists of two different projects, the front end GUI and the backend protocol engine. The backend is designed to be separated from the GUI and used for any number of tasks. Since the goal of YCC Trainer is to show how the Yahoo! Messenger protocol works, I will primarily focus on the backend called YCC_YMSG_Functions.

Screenshot - YCC_Trainer_program.gif

YCC_YMSG_Functions

YCC_YMSG_Functions consists of four modules, modUser, modYFunctions, modByteFunctions, and modSockets. The only module that will need to be accessed is modUser as this is the place that all state data, function calls, and events reside.

Screenshot - YCC_Trainer_YMSG.gif

All high level communication within YCC_YMSG_Functions is contained in a structure called uPacket. A uPacket contains all the header information and payload in an easy to access structure without having to manually parse the information. The process for converting a packet to raw byte data and vice versa is contained in modYFunctions. When sending a YMSG message you should call modYFunctions.PacketToByte and when receiving a YMSG message you should convert it to a uPacket by calling modYFunctions.ByteToPacket. The third module, modByteFunctions, holds methods for byte operations such as byte concatenation, which is used throughout YCC_YMSG_Functions. Lastly, modSockets is the network facing module that converts the byte data into an asynchronous Windows API socket.

Because communications within the Yahoo! Messenger Protocol is asynchronous, data can be sent and received independently and at any time. To send data simply call the associated method in modUsers. Receiving data is more complicated but is handled by the socket_receive and modUser_ProcessPacket functions. socket_receive handles all of the special cases that a YMSG packet can contain and modUser_ProcessPacket takes action on a particular YMSG service.

Creating a GUI

The first step in creating a front end to modUser is to create a new instance of YCC_YMSG_Functions. After this has been done, call modUser.Login. In this case Login can be considered the New function because it initializes your instance of YCC_YMSG_Functions and makes it ready to become fully operational. The Login function is also special because it kicks off the packet sequence needed to validate a user against the Yahoo! servers. Once the AuthResp packet has been correctly sent, you can consider your user to be logged onto 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)

While you are creating a new instance of yUser you should also add handlers for the many modUser events that can be triggered. Some of these include LogonSuccess, LogonFail, BuddyListUpdate, and NewMail.

Homepage

YCC Trainer and many other useful programs are housed at Yahoo! Coder's Cookbook (http://ycoderscookbook.com). http://ycoderscookbook.com/YCC_Trainer.htm is the main page for YCC Trainer and a forum is located at http://ycoderscookbook.com/forums. Also at Yahoo! Coder's Cookbook is a full tutorial section explaining much of the Yahoo! Messenger protocol, frequently updated blog, other code samples for Messenger, and much more.

History

1.0.0.1

  • It will now fully logon. A programming error during the AuthResp did not properly process the response challenge strings
  • Uses YMSG protocol version 15
  • New program structure. The high level unit of data is now the uPacket
  • Multiple YMSG packets within a TCP packet can be handled
  • A YMSG message spanning multiple TCP packets can be handled
  • Buddy list properly implemented
  • Separate ignore list
  • Invisible logon
  • Basic message handling and notify messages
  • A few experimental procedures. Nothing interesting to report yet
  • Much more but these are the major fixes

1.0.0.0

  • Initial release

To Do

  • For now the debug window should be considered broken. It does its very basic job but I have a lot of work to do on the presentation. I have also implemented a custom data structure for the queue. The default size is 25 and I have not tested it over this limit. If it crashes after 25 sent or received messages then this is mostly likely the culprit.
  • Implement custom packet maker
  • Ability to update the buddy list status
  • Add, accept, or remove buddies
  • There is a bug during log off. Apparently instead of YMSG, the server sends ****

License

This article, along with any associated source code and files, is licensed under The GNU General Public License (GPLv3)

About the Author

tansqrx101
Yahoo! Coder's Cookbook
United States United States
Member
I am the webmaster for the Yahoo! Coder’s Cookbook located at http://ycoderscookbook.com. At the Yahoo! Coder’s Cookbook (YCC) I have a blog (http://ycoderscookbook.com/blog/), forum (http://ycoderscookbook.com/forums/), Yahoo! Messenger protocol tutorials (http://ycoderscookbook.com/tutorials/index.html) and several programs (http://ycoderscookbook.com/code/index.html). The most notable programs are YCC Yahoo! Bot Maker (http://ycoderscookbook.com/code/YCC_Yahoo_Bot_Maker.html) which is a Yahoo! account creation tool, YCC Cam Cap (http://ycoderscookbook.com/code/YCC_Cam_Cap.html) which automatically captures Yahoo! webcam windows, and YCC Trainer (http://ycoderscookbook.com/code/YCC_Trainer.html) which is a basic primer for learning the Yahoo! Messenger protocol, YMSG. I also offer developer services (http://ycoderscookbook.com/donations/index.html) for those wishing for their very own Yahoo! tool but do not have the time or expertise.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionError!memberJarab28 Oct '12 - 19:57 
QuestionVB 2008 code examplesmemberMember 808837016 Jul '11 - 13:56 
AnswerRe: VB 2008 code examplesmemberhongphat851 Dec '11 - 0:56 
GeneralMy vote of 5memberjaskolmibob7 Jan '11 - 21:18 
GeneralForget it!memberSam S Man29 Aug '10 - 16:41 
GeneralIn C# versionmembercokiki9 Jan '10 - 21:36 
QuestionAuto Reconnect or login again after my internet connection is deadmemberariyok1 Oct '09 - 17:03 
GeneralYahoo conference clientmembersadeghhp2 Sep '09 - 20:22 
Generalnot working with memembershady05013 Aug '09 - 21:28 
GeneralRe: not working with memembersimplu28 Aug '09 - 1:54 
GeneralError occur when loginmemberkenoiloan9 Aug '09 - 22:01 
GeneralRe: Error occur when loginmembertansqrx10110 Aug '09 - 9:50 
QuestionWhat I'd like to see more of...memberAlien FX Fiend™4 Jul '09 - 9:59 
QuestionHow do it workmemberi_islamian30 Oct '08 - 20:18 
AnswerRe: How do it work [modified]memberChipRayzor1 Nov '08 - 6:13 
AnswerRe: How do it workmembertansqrx1012 Nov '08 - 18:16 
QuestionReleasemembersnoopcatt15 Oct '08 - 0:40 
GeneralYour website.memberxmd31415 Jun '08 - 13:33 
GeneralRe: Your website.membertansqrx10118 Jun '08 - 10:47 
GeneralAccept/Add buddy requestmembernaghicalin20 May '08 - 21:41 
GeneralRe: Accept/Add buddy requestmembernaghicalin22 May '08 - 3:14 
QuestionRe: Accept/Add buddy requestmemberRadu_2011 Jul '08 - 3:53 
AnswerRe: Accept/Add buddy requestmemberkkrisjoy27 Oct '08 - 6:07 
Questionproxy support?memberMember 27559819 Apr '08 - 20:19 
AnswerRe: proxy support?membertansqrx10111 Apr '08 - 19:17 
Generalwow, this is exactly what i searched for...memberductv30 Oct '07 - 12:59 
GeneralRe: wow, this is exactly what i searched for...memberductv31 Oct '07 - 8:25 
GeneralRe: wow, this is exactly what i searched for...membertansqrx10121 Nov '07 - 21:19 
Generalchange statusmemberpersianworld300016 Jul '07 - 0:19 
AnswerRe: change statusmembertansqrx10115 Aug '07 - 11:21 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web02 | 2.6.130516.1 | Last Updated 21 May 2007
Article Copyright 2007 by tansqrx101
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid