This week we implemented two new features of the server side API. If you would like to experiment with one or both of these new features, download the zip(s) and follow the instructions to patch your ES5.
Patch your ES5: After downloading one of the zips, look in the server/java/lib folder to find the updated ElectroServer5.jar file. Move your current installation's server/lib/ElectroServer5.jar file somewhere safe, and copy in the new one. Restart ES5. Odds are excellent that the only change you will notice is some harmless error messages in your log telling you exactly which extensions and plugin handles haven't been migrated. These can be ignored since they shouldn't have any effect. If you do notice any problems, please TELL ME. I'm trying to make this next release as painless as possible. (the error messages are so that you can tell which classes were not automatically migrated - it's possible that all of yours were!)
This new feature is in the RoomUserEvents interface. Any room level plugin can use it. The plugin's userDidEnter method will be triggered after the client is sent the successful JoinRoomEvent. This is useful for situations where clients want to wait to add a listener for plugin events until after they have joined the room, but the plugin wants to send information to the client when it joins the room. Many of our current games use a workaround here of the client sending an "init me!" plugin request in onJoinRoomEvent.
This is a new feature of the LoginEventHandler interface. Any login event handler can use it. The userDidLogin method will be triggered after the client is sent the successful LoginResponse. This is particularly useful in a two step login process, or any time that we want to do a database access immediately after login, about the given user. Some existing ES5 applications use a workaround of a scheduled execution for a few seconds after the login event handler returns ChainAction.okAndContinue, and others rely on the client sending a plugin request immediately after login.
We do not have a live example of either of these, due to needing to patch the ES5 and to the fact that there really isn't much to see - just logging lines (see screenshot).