Une bibliothèque très légère et facile à utiliser pour les applications client-serveur-client ou simplement serveur-client en Java faisant tout le travail pour vous: configuration de la connexion, reconnexion, délai d'expiration, gardien de gamme, etc. en arrière-plan. Dites simplement à la demande quoi envoyer et recevoir, et le reste se produira seul. C'est presque magique!
Qualité de code et état de construction
import java . net . Socket ;
public class MyServer extends Server {
public MyServer ( int port ) {
super ( port );
}
@ Override
public void preStart () {
registerMethod ( "SOME_MESSAGE" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg );
sendReply ( socket , "Hey, thanks for your message. Greetings!" )
}
});
}
}Faites simplement votre propre classe, par exemple le serveur d'extension MyServer, utilisez simplement le constructeur d'origine et implémentez la méthode prestart (). Dans la méthode Prestart, ajoutez simplement
registerMethod ( "IDENTIFIER" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg , socket );
sendReply ( socket , "Some Reply" );
}
});Pour chaque identifiant d'un dossier de données que le serveur a reçu, vous souhaitez réagir.
Exemple: Donc, si vous enregistrez "ping" et un "pong" qui répondait exécutable au client, inscrivez-vous simplement
registerMethod ( "PING" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
sendReply ( socket , "Pong" );
}
});Et c'est tout.
Pour que plus d'identificateurs réagissent, mettez ces lignes plusieurs fois dans votre prestart (). N'oubliez pas d'envoyer une réponse aux clients à partir duquel vous avez obtenu le dossier de données, car ils attendront la fin du monde pour une réponse de votre part.
Exemple pour un serveur diffusant un message de chat à tous les clients connectés:
registerMethod ( "Message" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
System . out . println ( "[Message] New chat message arrived, delivering to all the clients..." );
broadcastMessage ( msg ); //The broadcast to all the receivers
sendReply ( socket , String . valueOf ( reveicerCount )); //The reply (NECESSARY! unless you want the client to block while waiting for this package)
}
}); import java . net . Socket ;
public class MyClient extends Client {
public MyClient ( String id , String address , int port ) {
super ( id , address , port );
registerMethod ( "SOME_MESSAGE" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
System . out . println ( "Look! I got a new message from the server: " + msg . get ( 1 ));
}
});
start (); // Do not forget to start the client!
}
}Faites simplement votre propre classe, par exemple le client d'extension MyClient, utilisez simplement le constructeur d'origine. Chaque fois que vous êtes prêt pour que le client puisse vous connecter, appelez Start (). Le client se connectera au serveur en fonction des paramètres de constructeur et s'inscrira sur le serveur. À partir de maintenant, il peut recevoir des messages du serveur et rester connecté (et se reconnecter si nécessaire) jusqu'à ce que vous appeliez stop ().
Pour réagir sur un message entrant, il suffit d'ajouter
registerMethod ( "IDENTIFIER" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg , socket );
}
});Quelque part, je suggère le constructeur lui-même, pour chaque identifiant de message que vous souhaitez gérer.
Exmaple pour un message de chat entrant sur le serveur:
registerMethod ( "PING" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
System . out . println ( "Look! I got a new message from the server: " + msg . get ( 1 ));
// msg.get(1); should now return "Pong" in our example.
}
});Différent du client, le serveur ne s'attendra pas à une réponse par défaut. Alors ne lui envoyez pas toujours un package de réponse, car il a besoin d'une méthode extra-identification inscrite pour cela.
Comme serveur:
En tant que client:
Il y a des gestionnaires d'événements (par exemple OnConnectionGood (), OnConnectionProblem (), OnClientRegistered (...), etc.) Vous pouvez écraser pour gérer ces événements.
Les classes client et serveur fournissent toutes deux les gestionnaires d'événements OnLog et OnLoGerror, qui peuvent être remplacés dans l'implémentation si les messages d'informations et les messages d'erreur ne doivent pas (seulement) être sortis dans la console.