ConspiracyDecoder/requetes/requete_broker.go

72 lines
1.7 KiB
Go

package requetes
import (
"ConspiracyDecoder/binary"
"fmt"
"os"
)
func ReadRequete(bytes []byte) {
bytesEntete := bytes[:20]
// Lecture de l'en-tête.
entete, err := ReadEntete(bytesEntete)
if (err != nil) {
fmt.Println(err)
os.Exit(1)
}
fmt.Printf("%+v\n", entete)
switch entete.NumReq {
case NUMREQ_REQUET_MES_PARTIES:
fmt.Println("Requête : Mes parties.")
// Lecture d'une requête connectée basique.
reqConnectee := ReadRequeteConnectee(bytes[20:28])
fmt.Printf("ID de connexion : %d\n", reqConnectee.IdConnexion)
if len(bytes) > 28 {
fmt.Println("\nLecture de la réponse.")
fmt.Println("\n === \n")
ReadRequete(bytes[28:]) // Lecture de la réponse, directement après dans le buffer.
}
break
case NUMREQ_RESULT_INFO_INSCRIPTION_PARTIE:
fmt.Println("Réponse : Informations inscriptions / parties.")
parties, err := ReadResultatInfoInscriptionPartie(bytes[20:])
if err != nil {
fmt.Println(err)
os.Exit(1)
}
for index, partie := range parties {
fmt.Printf("%d: %+v\n", index, partie)
}
break
case NUMREQ_RESULT_EXCEPTION:
fmt.Println("Réponse : Exception.")
fmt.Printf("CodeException : %d\n", binary.BinaryGetInt(bytes, 20, 4))
break
case NUMREQ_RESULT_REQUETE:
fmt.Println("Réponse : RésultatRequête.")
fmt.Printf("Message acquité : %d\nCode erreur : %d\n", binary.BinaryGetInt(bytes, 20, 4), binary.BinaryGetInt(bytes, 24, 4))
break
default:
fmt.Println("Type de requête non géré.")
}
}
func CreateRequetteConnecteeBasique(typeRequete int) []byte {
return append(WriteEntete(Entete{
Preambule: PREAMBULES[0],
Version: VERSION,
NumReq: int32(typeRequete),
TailleReq: 8,
}), WriteRequeteConnectee(RequeteConnectee{
IdConnexion: -1614038591215924784,
})...)
}