Una biblioteca muy liviana y fácil de usar para aplicaciones cliente-cliente o simplemente servidor-cliente en Java haciendo todo el trabajo para usted: configuración de conexión, reconexión, tiempo de espera, mantener alive, etc. en segundo plano. Simplemente dígale a la solicitud qué enviar y recibir, y el resto sucederá solo. ¡Eso es casi mágico!
Calidad del código y estado de compilación
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!" )
}
});
}
}Simplemente haga su propia clase, por ejemplo, MyServer Extending Server, simplemente use el constructor original e implemente el método prestart (). En el método de Prestart, solo agregue
registerMethod ( "IDENTIFIER" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg , socket );
sendReply ( socket , "Some Reply" );
}
});Para cada identificador de un DataPackge que recibió el servidor, desea reaccionar.
Ejemplo: Entonces, si registra "ping" y un ejecutable que responde "pong" al cliente, simplemente regístrese
registerMethod ( "PING" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
sendReply ( socket , "Pong" );
}
});Y eso es todo.
Para que reaccionen más identificadores, simplemente coloque esas líneas varias veces en su prestart (). No olvide enviar una respuesta a los clientes de los que obtuvo el DataPackge, porque esperarán hasta que el mundo termine para una respuesta de usted.
Ejemplo para un servidor que transmite un mensaje de chat a todos los clientes conectados:
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!
}
}Simplemente haga su propia clase, por ejemplo, MyClient Extending Client, simplemente use el constructor original. Siempre que esté listo para que el cliente inicie sesión, llame al inicio (). El cliente se conectará al servidor dependiendo del constructor-parámetros y se registrará en el servidor. De ahora en adelante puede recibir mensajes del servidor y mantenerse conectado (y reconectarse si es necesario) hasta que llame a Stop ().
Para reaccionar en un mensaje entrante, solo agregue
registerMethod ( "IDENTIFIER" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg , socket );
}
});En algún lugar, sugiero el constructor en sí, para cada identificación de mensaje que desea manejar.
Exmaple para un mensaje de chat entrante desde el servidor:
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.
}
});A diferencia del cliente, el servidor no esperará una respuesta por defecto. Así que no siempre le envíe un paquete de respuesta, porque necesita un método de identificador extra registrado para eso.
Como servidor:
Como cliente:
Hay algunos manejadores de eventos (por ejemplo, OnConnectionGood (), OnConnectionProblem (), OnClientRegistered (...), etc.) que puede sobrescribir para manejar estos eventos.
Las clases del cliente y el servidor proporcionan los manejadores de eventos Onlog y Onlogerror, que pueden anularse en la implementación si los mensajes de información y los mensajes de error no deben (solo) emitirse en la consola.