EsotericSoftware / kryonet

TCP/UDP client/server library for Java, based on Kryo
BSD 3-Clause "New" or "Revised" License
1.81k stars 419 forks source link

Hooking into and providing custom behavior for the host discovery process #52

Closed codetaylor closed 10 years ago

codetaylor commented 10 years ago

I've added a pair of interfaces, ClientDiscoveryHandler and ServerDiscoveryHandler, that can be used to hook into the host discovery interaction and provide custom behavior. The ServerDiscoveryHandler allows a server to return additional information, such as the name of the currently running game or total players connected, in a custom response. The ClientDiscoveryHandler allows a client to process the custom packet returned by the ServerDiscoveryHandler.

Each interface has a nested static implementation that mirrors the existing behavior of Kryonet. These default implementations are assigned to the discoveryHandler member fields in the Server and Client class during construction, and a setter method has been provided to assign a new handler. The empty ByteBuffer that was used in the Server class to send the default empty response has been moved to the default implementation of the ServerDiscoveryHandler.

The ServerDiscoveryHandler interface has one method:

The ClientDiscoveryHandler interface has three methods:

All of the existing tests pass with the default handlers and I've extended the DiscoverHostTest to include a test for custom handlers. To the best of my knowledge, no existing behavior has been changed and this shouldn't break any code that uses Kryonet.

NathanSweet commented 10 years ago

Looks nice, thanks!

codetaylor commented 10 years ago

You're welcome! :)