Server
- Bug Fix: Thread hangs when sending certain UTF-8 sequences. This was a potential problem in multilingual projects under load.
- Bug Fix: Buddies not reported as online when logging in
- Bug Fix: Too many out-of-order messages
- Added support for wildcard address for gateway listener IP
- Bug Fix: Cannot specifiy multiple ManagedObjects in extension.xml
- Bug Fix: NPE in ClientCreateOrJoinGameRequestMessage if user disconnects simultaneously
- Bug Fix: NPE when firing BuddyListEvents in certain circumstances
- Bug Fix: Remove Gateway IP checks when running in Distributed mode
- Dramatically increased the performance of a unzipping extensions that are uploaded via the web admin
- Bug Fix: Server-level component creation page of the web admin generates an exception
- Added support for disconnected clients/HTTP clients
Client
- Bug Fix: GateWayKickUserRequest now supported in the ActionScript client-side APIs
- Added support for disconnected clients/HTTP clients
Examples
- New Example: Http Connection example to show how HTTP clients work
Server
- EsOb stuff: Implemented toString, toXML, and fromXML. Overloaded all the getters, to provide a default value alternative. Added better error messages for attempting to set null values, and throwing an exception when attempting to set an EsObjectArray or NumberArray that has an element that is null.
- XmlHelper: Enabled XmlHelper to process both Byte and ByteArray objects.
- Added support for processing of aggregated plugin request messages.
- Added new method to ElectroServerApi: createRoomVariableForUser
- Added details to RoomVariableResponse objects returned successfully from ElectroServerApi
- Bug fix: Fixed concurrency bugs with heavy join/leave activity in rooms.
- Bug fix: Room plugins properly notified of kicked and banned users
- Bug fix: RoomManager.addVariableToRoom and deleteVariable were throwing NPE if User argument was null, and ElectroServerApiImpl was invoking those methods while passing a null.
- Bug fix: Fixed several memory leaks
- Bug fix: Plugin deleting a room variable was throwing an exception because the user was null (fixed now)
- Bug fix: Deadlock with room creation/destruction and the GameManager
- Added ability for encrypted protocols
- Added HTTP-based protocol
- Added new default gateway listener on port 9899 for Binary
- Updated the web admin restart page during a restart
- Bug fix: Binary protocol data would get garbled under load
Client
- Added some null checking in the UserManager and Zone class.
- Changed the way you specify a message protocol to be instance-specific. It was a static property keeping you from having multiple instances of ES using different protocols. Usage changed from ElectroServer.PROTOCOL = Protcol.BINARY to esInstance.setProtocol(Protocol.BINARY). Must be set before a connection is made.
- Changed the default trace logging to false. To turn it back on use esInstance.setDebug(true).
- Bug Fix: reset outboundId on connection to 0 once it hits 9999
- Bug fix: Failed login response was still setting a variable to indicate that the user was logged in.
- Bug fix: EsObject.toString() didn't show the closing ] or } if an array or object is emtpy.
- Bug fix: If you set the same property name multiple times in EsObject it was stored multiple times.
- Bug fix: ElectroServer.close() gave a run-time error if the protocol being used was binary.
- Bug fix: If AS3 client fails to connect to a valid binary ip/port combo, a run-time error occurred.
- Bug fix: If ElectroSever.close() was called as a result of an inbound event, a run-time error was caused.
- Bug fix: The Observable class wasn't working with a copy of the listeners array when dispatching an event. Could cause a condition where listener would be skipped.
- Updated internal EsObject data type names to match those found on the server. No changes to the way you use EsObject are needed.
Examples
- New Example: SendAndLoadImageFromServer - Shows how to send an encoded image through the binary socket from the client to the server, and save it. It can then be loaded back.
- New Example: SetModeratorPermissions - shows how to give moderators a special permission set when they log in.
- New Example: DatabaseExample - Shows how to access a database from a plugin and execute SQL.
Web Admin
- Added more explanations to several of the pages.
- Added "change my password" page
- "can manage stat server" replaced by "can manage server" which grants permission to manage the General settings and Gateways tabs.
- Bugfix: Admins without permission to manage extensions, filters, and persistent rooms should now be prevented from doing so, even if they use bookmarks. Managing word lists is now included in filter permissions (so if somebody isn't allowed to manage filters, he can't manage word lists either.) Managing keystore password is considered part of managing users, but anybody can manage permission sets.
Documentation
- Added more javadocs to the server
- Minor update to the manual (mentioning binary protocol)
- Bug fix: Manual instructions on increasing memory with Linux now fixed
-
http://es-wiki.com
Server
- Full binary protocol support added to the server.
- Refactored some internal code to make a cool feature (ready in 4.0.5) possible.
- Added a series of validation checks to ensure an ESObject is populated properly to avoid encoding/decoding exceptions.
- Tweaked loading of the Extension.xml to make it a bit more robust.
Client
- Full binary protocol support added to the API.
- Added latency simulation to the ElectroServer class to help in simulating high-latency systems. startLatencySimulation and stopLatencySimulation methods added.
- Added a toString() method to EsObject which returns a readable sting that shows the structure of your EsObject.
- Added a toXML() method that kicks out an XML formatted string representation of the EsObject.
- Added a fromXML() method to the EsObject that accepts an XMLNode as an input to populate the EsObject.
- Refactored internal message processing for better multi-protocol support.
- Full binary support implemented into the EsObject serialization.
- BinaryMessageReader and BinaryMessageWriter updated.
- Bug fix: New users entering a room were coming in with a null user name. This was introduced in 4.0.3 when fixing another issue.
- Bug fix: ClientIdleEvent was not implemented. So it caused an AS3 run-time error if the client was disconnected due to being idle.
- Bug fix: StringMessageReader and StringMessageWriter didn't support writeByte and readByte, now they do.
Examples
- Bug Fix: PluginPublicMessage example had a bug in the Java extension.
- Enhanced several of the examples to do more and ensured the AS and Java versions were identical.
Documentation
- Updated the manual in a few places to flesh it out.
- Added more javadocs to the server particularly in the API classes.
Server
- Bug Fix: Tweaked the web admin so that it doesn't error with specific extension component combinations.
- Added more validation to reduce problems when registering games with the GameManager.
- Cleaned up the extension page in the web admin a bit.
- Added support for kicking a user from the entire server into the ElectroServerAPI class.
- Bug Fix: Renamed "aquireObject" to "acquireObject" - no idea how that slipped through the cracks.
- Added a "getLogger" call to the server-side APIs to make it easy to log from components. See the javadocs for more details.
- Bug Fix: Replaced the user ID with a user name in the logout event handler.
- Bug Fix: Corrected an issue with video event updates in a room not containing a stream name.
- Added: Implemented full restart in the web admin. This allows the server to be fully managed remotely.
- Tweaked the transaction execution logging to use the new handle "TransactionTimer" and to log timing events as "info" rather then "warn".
- Bug Fix: Corrected a bug where user originating messages being updated by a plugin were not being returned properly.
Client
- Bug Fix: UserListUpdateEvents didn't always return a value with getUserName - namely when a user left the room. It now will always return a value.
- Bug Fix: Under certain circumstances a user variable might not have been removed when it should have been.
- Bug Fix: User variables are stored in an indexed array and by name. There was a bug that allowed duplicate user variables to be added to the array.
- Bug Fix: Changed the default AMF encoding for RTMP in the AS3 API.
- Added doesUserVariableExist(name:String):Boolean method to the User class.
- Added doesPropertyExist(name:String):Boolean method to the EsObject.
- Added ActionScript documentation to several classes in the com.electrotank.electroserver.message.event package.
- Added doesRoomVariableExist(name:String):Boolean method to the Room class.
- Bug Fix: In 4.0.2 Errors.VulgarityCheckFailed was accidentally removed. It was restored.
- Bug Fix: ActionScript 3 API failed to raise a ConnectionEvent when a connection fails.
Examples
- Bug Fix: Fixed null comparison to be an empty string comparison in LoginEventHanlderExample
- Added: WebCamAndMicrophoneChat example to illustrate audio/video chat
- Added: RecordVideo example to show how to record a video and play it back.
- Added: PluginPigLatin example to show how to capture a PublicMessageEvent using a plugin, modify the message, and send it along.
Server
- Bug Fix: Corrected a NPE that could occur in the BuddyListManager
- Bug Fix: Corrected a problem with the RoomManager that was preventing plugins from creating persistent rooms in specific cases.
- Bug Fix: Corrected a bug in the room-level plugin init process that could cause errors when attempting to access the current room.
- Updated the persistent room screen in the web admin to support all of the possible fields for a persistent room.
- Dramatically updated the Extension management screen in the web admin to provide a access to all loadeded extensions.
- Tweaked the error message that is displayed when the server is started twice or when the database has been locked already.
- Bug Fix: No longer allow a null username to get passed into a login event handler - it will be an empty string in that case.
- Added validation to ensure no login event handler ever lets a null or blank username slip through.
- Bug Fix: Tweaked the extension.xml parsing code to allow comments
- Created a command-line utility to allow updating the database directly with SQL scripts while the server is off
- Created a command-line utility to install a license file directly into the server while the server is offline
- Created a page in the web administrator to support shutting down the server remotely.
Client
- Removed NameValuePair class as its no longer needed.
- Fixed potential memory leak in Logger class.
- Fixed bug in GetUserVariableRequest
Documentation
- Bug Fix: Corrected an issue with our build script that excluded the "extensions" package from the JavaDocs
- Bug Fix: Corrected an issue with our build script that was removing generics from the JavaDocs
- Bug Fix: Corrected the bugs the LoginEventHandler Java example
- Added a new example to show how to use managed object factories as a database connection pool
- Manual updates to fix various typos
- Added ActionScript documentation for every package
- Added ActionScript examples to a few more request classes
Server
- Updated BuddyListManager to send a "logged off" event when you add a user that isn't online
- Bug Fix: Updated license page of the web admin to properly show expiration date
- Bug Fix: Updated RoomManager to let a plugin ignore operator status when creating room variables
- Bug Fix: "temp" and "files" were switched in the internal database, they are now correct.
Installer
- Bug Fix: RPM installer no longer errors when attempting to extract
Documentation
- Various additions and typos corrected in manual and ActionScript documentation
- New examples for the GetRoomsInZoneRequest and LeaveRoomRequest classes in ActionScript documentation.
Known Issues
- Persistent room page in web admin is missing a few options
Client
- Full ActionScript 2 and ActionScript 3 API support.
- Documentation for the ActionScript 3 API should be used for ActionScript 2 as well. Just replace example code 'void' statements for 'Void'.
- ActionScript 2 API works for Flash players 6, 7, 8, 9, Flash Lite 2.1 and Flash Lite 3.
- ActionScript 3 API works for Flash players 9 and up.
Known Issues
- Extension hot reloading not fully implemented. So it is disabled.
- Binary support not fully implemented.