La Première étape consiste à préparer le terrain en créant la fonction qui recevra les messages
Cela devrais ressembler à :
private void NomDeMaFonctionDeReception(int Id, DataReader Content, int CompteNo)
{
}
Id = Numéro Identifiant le message, en gros il sert à reconnaître le message , c'est comme un peu sont nom
Content = Tableau d'octets contenant le message
CompteNo = Il est inutile pour le moment mais on doit quand même le mettre
La deuxième étape consiste à déclarer la variable en globale, en espérant ne pas avoir à expliquer comment déclarer en globale
Connect MaVar = new Connect();
Troisièmement vous devez initialiser la connexion et un moyen de la stopper aussi hein ;)Pour y arriver nous utiliserons les procédures StartReception et StopReception contenu dans la classe Connect. Pour mon exemple j'ai fais une petite Fenêtre avec un bouton Go et un autre Stop.
private void btnGO_Click(object sender, EventArgs e)
{
MaVar.StartReception(NomDeMaFonctionDeReception);
}
private void btnStop_Click(object sender, EventArgs e)
{
MaVar.StopReception();
}
Donc pas grand chose à expliquer de plus mise à part que l'argument de StartReception doit être la fonction précédemment créé :D
Quatrièmement nous devons écrire la fonction de réception :D , je ne m'attarderai pas énormément la dessus puisque le fonctionnement reste pratiquement le même que pour le reste des tutoriels du forum. (Pour cette partie une connaissance du protocole de D.2 est requis mais un tutoriel est à venir)
Vous devez pour commencer faire une boucle switch en fonction de l'Id (Bah oui on ne doit pas traiter tout les messages de la même manière)
Ce qui donne donc
switch (Id)
{
}
Sauf que la on ne gère aucun cas on va donc en ajouter un
switch (Id)
{
case HelloConnectMessage.ProtocolID:
break;
}
La il le détecte mais ne fais rien, pour ce paquet il est nécessaire de le lire donc en espèrant que vous ailliez compris les autres tuto du forum cela ressemblera presque toujours à
switch (Id)
{
case HelloConnectMessage.ProtocolID:
HelloConnectMessage Hcm = new HelloConnectMessage();
Hcm.Deserialize(Content);
break;
}
Puis l'écriture de la réponse (Réponse ci-dessous modifié)
IdentificationMessage Im = new IdentificationMessage();
Im.version.major = 2;
Im.version.minor = 5;
Im.version.release = 1;
Im.login = "MonUserName";
Im.credentials = new CryptPass().Crypt_Pass(Hcm.Salt + "MonPass", hcm.Key);
Im.autoconnect = true;
Im.lang = "fr";
MaVar.SendMessage(Im);
Pour le password contentez vous de recopier la ligne en remplaçant "MonPass" par votre pass.
Pour finalement envoyer le paquet la procédure SendMessage Suffit avec comme paramètre votre objet. (Pas besoin de sérialiser)
Allez je vous donne direct la 2e réception de paquet à régler
case SelectedServerDataMessage.ProtocolID:
SelectedServerDataMessage Ssdm = new SelectedServerDataMessage();
Ssdm.Deserialize(Content);
MaVar.RestartReception(Ssdm.address, Ssdm.port);
AuthenticationTicketMessage Atm = new AuthenticationTicketMessage();
Atm.lang = "fr";
Atm.ticket = Ssdm.ticket;
MaVar.SendMessage(Atm);
break;
La seule nouvelle fonction à comprendre est RestartReception
En gros le premier paramètre est le nouvel Ip du serveur et le second le Port où l'on doit se connecter
Le code complet du premier Tuto ci-dessous
#region Les Usings de base
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
#endregion
using Bot_Dof;
using Bot_Dof.Network.messages;
using Bot_Dof.Network.types;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
Connect MaVar = new Connect();
#region La fonction de base de Gui
public Form1()
{
InitializeComponent();
}
#endregion
private void btnGO_Click(object sender, EventArgs e)
{
MaVar.StartReception(NomDeMaFonctionDeReception);
}
private void btnStop_Click(object sender, EventArgs e)
{
MaVar.StopReception();
}
private void NomDeMaFonctionDeReception(int Id, DataReader Content, int CompteNo)
{
switch (Id)
{
case HelloConnectMessage.ProtocolID:
HelloConnectMessage Hcm = new HelloConnectMessage();
Hcm.Deserialize(Content);
IdentificationMessage Im = new IdentificationMessage();
Im.version.major = 2;
Im.version.minor = 5;
Im.version.release = 1;
Im.login = "MonUserName";
Im.credentials = new CryptPass().Crypt_Pass(Hcm.Salt + "MonPass", hcm.Key);
Im.autoconnect = true;
Im.lang = "fr";
MaVar.SendMessage(Im);
break;
case SelectedServerDataMessage.ProtocolID:
SelectedServerDataMessage Ssdm = new SelectedServerDataMessage();
Ssdm.Deserialize(Content);
MaVar.RestartReception(Ssdm.address, Ssdm.port);
AuthenticationTicketMessage Atm = new AuthenticationTicketMessage();
Atm.lang = "fr";
Atm.ticket = Ssdm.ticket;
MaVar.SendMessage(Atm);
break;
}
}
}
}