Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[Tutoriel] Hébergement d'un serveur TXCobalt[Niveau: Avancé]
Auteur Message
Répondre en citant
Message [Tutoriel] Hébergement d'un serveur TXCobalt[Niveau: Avancé] 
Salut,

J'ai vu qu'il y avait plein de tuto alors pourquoi pas faire le mien, pour mon jeu Razz


Tout d'abord il faut la DLL (+ les libs utilisées) de TXCobalt.Core -> https://up1.ca/#hQyjnFeYtPu1lKIQ06r3ZQ
Vous pouvez aussi le compiler depuis la source (C#) : https://gitlab.com/TXCobalt/TXCobalt.Core


On crée un projet Console utilisant le .net 4.0 de préférence (Une interface sera pour plus tard).
Mettez la DLL et les libs dans un même dossier (accessible par rapport au projet).

On ajoute TXCobalt.Core.dll en référence, inutile d'ajouter les librairies, elles le seront directement ajouter lors de la compilation.
Dans "Module1", on ajoute
Code:
Imports TXCobalt.Core
au début du code, ça permet d'utiliser directement les classes de TXCobalt sans devoir faire TXCobalt.Core.*.

Dans notre méthode Main, on crée un GameInstanceManager ->
Code:
Dim manager = New GameInstanceManager()

Puis on ajoute une "Instance" avec les propriétés par Defaut
Code:
manager.AddServer(New GameInstance(Map.EmptyMap, GameRules.Default))


Donc pour ajouter un joueur, il faudra faire
Code:
manager.AddPlayer(Player)
ou
Code:
manager.SendConnectionRequest(client, request)


Maintenant, il faut récupérer les joueurs par TCP/IP grâce a un Socket pour que notre server soit multijoueur

On crée un socket TCP pour IpV4 (changer AddressFamily.InterNetwork en AddressFamily.InterNetworkV6 pour l'IpV6)
Code:
Dim socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)


Et on le met en mode écoute sur le port 50
Code:
socket.Bind(New IPEndPoint(IPAddress.Any, 5050))
socket.Listen(20)


Si on y ajoute quelques Console.WriteLine, on as ça
Code:
Sub Main()
Console.WriteLine("Initialisation du serveur.")
Dim manager = New GameInstanceManager()
manager.AddServer(New GameInstance(Map.EmptyMap, GameRules.Default))
Dim socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

socket.Bind(New IPEndPoint(IPAddress.Any, 5050))
socket.Listen(20)
Console.WriteLine("Server initializé.")
End Sub


On fait une boucle infinie pour la connexion des clients où on va y faire tout le reste
D'abord, on commence par récupérer la connexion du client (ceci attends jusqu’à ce qu'il y ai une connexion au serveur) avec un timeout pour faire en sorte que le client soit refusé au cas ou il ne donne pas de réponse
Code:
Dim client = socket.Accept()
client.ReceiveTimeout = 3000
client.SendTimeout = 1250


Dans un Try Catch

Dans le Try :
On crée une réponse de server que l'on envoie
Code:
Dim response = New ServerResponse()
response.IsAvailable = True
response.Map = "Default"
response.MaxPlayer = -1
response.Moded = False
response.MOTD = "VB.NET TXCobalt server"
response.PasswordProtected = False
response.PlayerCount = -1
response.ProtocolVersion = "0.2"
response.UseAlternateSerialization = False

Code:
client.Send(response.Serialize())



Avec notre connexion de client, on récupère les données envoyées par le client dans un buffer de 2048 octects
Code:
Dim buffer(2048) As Byte
client.Receive(buffer)

Et on envoie le tout au serveur
Code:
Dim request = Serializer.Deserialize(Of ConnectionRequest)(buffer)
manager.SendConnectionRequest(client, request)

Dans notre Catch, on dit que la connexion a échoué et on ferme le socket du client:
Code:
Console.WriteLine("Erreur de communication")
client.Close()


Code final (version console) :
Code:
Imports System.Net
Imports System.Net.Sockets
Imports TXCobalt.Core

Module Module1
    Sub Main()
        Console.WriteLine("Démarage du serveur.")
        Dim manager = New GameInstanceManager()
        manager.AddServer(New GameInstance(Map.EmptyMap, GameRules.Default))
        Dim socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

        socket.Bind(New IPEndPoint(IPAddress.Any, 5050))
        socket.Listen(20)
        Console.WriteLine("Server démaré.")

        While True
            Dim client = socket.Accept()
            client.ReceiveTimeout = 3000
            client.SendTimeout = 1250

            Try
                Dim response = New ServerResponse()
                response.IsAvailable = True
                response.Map = "Default"
                response.MaxPlayer = -1
                response.Moded = False
                response.MOTD = "VB.NET TXCobalt server"
                response.PasswordProtected = False
                response.PlayerCount = -1
                response.ProtocolVersion = "0.2"
                response.UseAlternateSerialization = False

                client.Send(response.Serialize())

                Dim buffer(2048) As Byte
                client.Receive(buffer)
                Dim request = Serializer.Deserialize(Of ConnectionRequest)(buffer)
                manager.SendConnectionRequest(client, request)
                Console.WriteLine("Le joueur {0} viens de se connecter au server.", request.Username)
            Catch
                Console.WriteLine("Erreur de communication")
                client.Close()
            End Try
        End While
    End Sub
End Module


La version WinForm sera a venir.
Voila le code d'origine, plus complet et en C# https://gitlab.com/TXCobalt/TXCobalt.Server/blob/dev/Program.cs

Pour ceux qui cherchent un client, vous pouvez prendre la version WIP (encore hors git) : https://up1.ca/#RXO3aZ8p5XiXXK_pxrTiKA



Dernière édition par TSnake41 le Sam 19 Déc 2015 - 21:05; édité 1 fois

______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [Tutoriel] Hébergement d'un serveur TXCobalt[Niveau: Avancé] 
Sympa tout ça , merci Smile 



Message [Tutoriel] Hébergement d'un serveur TXCobalt[Niveau: Avancé] 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch