500 users license
$700

Sunday, August 24, 2008

ElectroServer 4.05 Released!

ElectroServer 4.05 is here! This release brings more documentation, all reported bugs are fixed, new features, and some new examples.

Read the release notes for the full details.

Download ElectroServer 4.05 here.

Thursday, August 21, 2008

ElectroServer Wiki!

For several months we have been filling out an ElectroServer wiki with a lot of documentation and great tutorials! You can check it out here:
http://es-wiki.com/index.php?title=Main_Page

Labels:

Saturday, August 16, 2008

Simulating Latency

Internet or network latency is a fact of life in multiplayer games. The amount of time it takes a message to travel from a client machine to the server or from the server to client machine isn't something we as developers can control. You can effectively handle latency through various latency hiding tricks not discussed here.

It is difficult when programming games to test high latency conditions because developers are usually testing on an ideal set up. In the ElectroServer client-side API we introduced a way for you to simulate latency. There is never a better test than the real thing, but this is great for testing your game under higher message delays. You can crank up the latency to see how your game handles it.

Turning this setting on and off is pretty simple. Here is an example of turning on the latency simulation:
var es:ElectroServer;//created and connection established elsewhere
es.startSimulatingLatency(500);//time in milliseconds

To stop the simulation:
es.stopSimulatingLatency();

Thursday, March 27, 2008

Using ES4 to Protect Your Code

It is widely known that if something can be downloaded to a client machine, then it is hackable. Someone who is dedicated enough can rip apart the file and do things like:
  • Decompile the application to get at the code.
  • Modify the code and recompile.
  • Steal the code.
  • The person can just extract assets such as images and audio.

There is nothing you can do to guarantee the protection of your file. But you can take measures to make it very difficult for people to mess with. For instance, obfuscating code makes code unreadable.

With ES4 there is something else that you can do to help protect your client-side Flash application. ES4 fully supports a true binary protocol. ByteArrays can be exchanged between the client and the server. Any binary file can be represented in a ByteArray.

The idea is very simple.

  • Put the important SWF somewhere non-web-accessible, but where ElectroServer can get at it.
  • Have another Flash client (one whose code you can stand to lose) connect to ES4.
  • This client then requests the SWF file from ES4. The SWF is streamed to the Flash client over binary socket as a ByteArray.
  • When the load has completed, the Flash client uses the Loader.loadBytes() technique (see Flash help) to convert the bytes to an actual MovieClip.

So what does this buy you? Well, now it is is substantially more difficult for someone to grab the SWF file that you are trying to protect.

This is just another layer of security. A person can still intercept the client-bound stream using some other tool and, if they understand the complex ES4 protocol, they can extract the specific SWF bytes.

Obviously you can add another layer of security in here by encrypting the byte stream so that anyone just grabbing the bytes still can't do anything with them, short of knowing encryption information.

Labels: ,

Thursday, March 20, 2008

Hallmark builds Virtual World with Electrotank

Easter has pasted and HallmarkPark is starting to see more traffic. Couple weeks ago Hallmark released their first virtual world with the help from the Electrotank team, ElectroServer 4, and Electrotank Universe Platform (EUP) technologies. We are still working out some things but what we have accomplished is quite amazing, delivering a project of this magnitude in couple months. Create a character, get rare items, and play games with other players. Who knows you may make some new friends along the way.

Check it out
HallmarkPark

-Robert

Labels: ,

Saturday, February 2, 2008

ElectroServer 4.0.4 Released!

We have been working hard on some great new features and are pleased to announce the release of ElectroServer 4.0.4!

True Binary Support
ElectroServer has had binary support since 4.0.0 but the client-side API didn't have it fully implemented. Now the ActionScript 3 client-side API fully supports the binary protocol giving game developers super high performance messaging!

When we say true binary support we mean true binary support. Our protocol reads and writes directly from a ByteArray utilizing all appropriate data types. (We have seen how some servers actually send a huge XML string over the binary socket wrapping their overly bloated string protocol which will actually decrease performance while buying you nothing.)

So what is so cool about binary? Stay-tuned for some future blog posts on this subject, but here are a few things to get you interested:
  • Lowest impact messaging possible in Flash. Smallest message sizes with shorter parsing times.
  • The ability to send/receive binary data. You can send screen data as a private message from one user to another, or to the server to be saved, or...[insert idea here].
  • Unique security ideas (future blog post plug)

To use the new binary protocol you need to have the ActionScript 3 client-side API. It won't work with ActionScript 2 because ActionScript 2 doesn't support binary socket or ByteArrays.

To enable the binary protocol in a Flash client you do the following:

  1. Import this: com.electrotank.electroserver4.entities.Protocol
  2. Add this line of code before creating a connection: ElectroServer.PROTOCOL = Protocol.BINARY;
  3. You'll also need to add a new gateway listener for binary, or modify the existing text listener for binary. (See the 'Gateways' button at the top of the web-based admin). Restart ES4 to take effect.

That's it! Nothing else changes. But now you can use the setByte/getByte and setByteArray/getByteArray methods of the EsObject in very interesting and useful ways.

EsObject Additions

EsObject is used all throughout ElectroServer to carry custom data between client and server, client and client, and between server extensions. While incredibly useful it is a little tough to debug sometimes. So on the ActionScript 2 and ActionScript 3 APIs we added an EsObject.toString() method that allows you to easily view the contents of the EsObject. See this post for more information.

On the server-side of things some added validation has been added to EsObject. This will ensure that you don't accidentally set null values on it. In 4.0.5 expect a server-side EsObject.toString() method as well.

There were some other interesting additions to this release that we'll talk about in future posts!

Wednesday, January 30, 2008

Pig Latin?

ElectroServer's web admin interface makes it easy to set language filters, but what if we want all the public chat in a given room to be translated in some fashion?
  • Replace all words on a given list with a random string made of characters from "!@#$%^&*"
  • Expand each of the acronyms on a given list, so that "btw" becomes "by the way", etc.
  • Have a game where all chat is encrypted using a simple cipher, and an encrypted quotation is presented. First player to submit the correct decrypted quotation wins, with incorrect guesses appearing in encrypted form.
  • Have a silly room where everything anybody says is translated into Pig Latin. Eryvay illysay!
PluginPigLatin is an example extension added with ElectroServer 4.0.3. Here's how you can make your own custom translation plug-in. First, create a Java class that extends BasePlugin. Add a method to do the translation, such as String translate(String message).

Override a single method of BasePlugin:
   public ChainAction userSendPublicMessage(UserPublicMessageContext context) {
String message = context.getMessage();
String returnMessage = translate(message.trim());
context.setMessage(returnMessage);
return ChainAction.OkAndContinue;
}
Next edit (or create) the Extension.xml file to include your plugin. Copy the compiled class and new version of Extension.xml to the proper folders for ElectroServer, then reboot the server.

Finally, in the Flash client that allows the user to join a room where you want the translation plug-in to be used, add the new plug-in to the list of plug-ins for the room. Any PublicMessageRequest the user sends will be processed by userSendPublicMessage. Easy!

For more information, see the PluginPigLatin example, and the plug-in tutorial on our new wiki.

Labels: , , , ,