Uma biblioteca muito leve e fácil de usar para aplicativos cliente-servidor-cliente ou simplesmente servidor-cliente em Java fazendo todo o trabalho para você: configuração de conexão, reconexão, tempo limite, manutenção etc. em segundo plano. Basta dizer ao aplicativo o que enviar e receber, e o resto acontecerá por si só. Isso é quase mágico!
Qualidade de código e status de construção
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!" )
}
});
}
}Basta fazer sua própria classe, por exemplo, MyServer Extending Server, basta usar o construtor original e implementar o método Prestart (). No método Prestart, basta adicionar
registerMethod ( "IDENTIFIER" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg , socket );
sendReply ( socket , "Some Reply" );
}
});Para cada identificador de um datapackge que o servidor recebeu, você deseja reagir.
Exemplo: então, se você se registrar "ping" e um executável respondendo "pong" ao cliente, basta se registrar
registerMethod ( "PING" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
sendReply ( socket , "Pong" );
}
});E é isso.
Para mais identificadores reagirem, basta colocar essas linhas várias vezes em seu Prestart (). Não se esqueça de enviar uma resposta aos clientes dos quais você obteve o DataPackge, porque eles esperarão até que o mundo termine para uma resposta sua.
Exemplo para um servidor que transmitia uma mensagem de bate-papo para todos os 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!
}
}Basta fazer sua própria classe, por exemplo, MyClient Extending Client, basta usar o construtor original. Sempre que você estiver pronto para o cliente fazer o login, ligue para Start (). O cliente se conectará ao servidor, dependendo dos parâmetros do construtor e se registrará no servidor. A partir de agora, pode receber mensagens do servidor e permanecer conectado (e se reconectar, se necessário) até que você ligue para Stop ().
Para reagir em uma mensagem de entrada, basta adicionar
registerMethod ( "IDENTIFIER" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg , socket );
}
});Em algum lugar, sugiro o próprio construtor, para cada ID da mensagem que você deseja manusear.
Exmaple para uma mensagem de bate -papo recebida do 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.
}
});Diferente do cliente, o servidor não espera uma resposta por padrão. Portanto, nem sempre envie um pacote de resposta, porque ele precisa de um método extra-identificador registrado para isso.
Como servidor:
Como cliente:
Existem alguns manipuladores de eventos (por exemplo, onconnectiongood (), onconnectionproblem (), OnClientRegistered (...), etc.), você pode substituir para lidar com esses eventos.
As classes do cliente e do servidor fornecem os manipuladores de eventos Onlog e OnLogerror, que podem ser substituídos na implementação se as mensagens de informação e as mensagens de erro não deveriam (apenas) ser emitidas no console.