09/15/2015

September release!

Hello there!

First, we would like to thank all the nice people we met at Gamescom and GDC Eu for the feedback they gave us. I sincerely wish you all a lot of success in your endeavours.

This month we focused our efforts in improving existing features and components and that's something we will continue in the next few weeks. We are a little behind schedule on a few workitem so we will probably add them to the preview server in the next days/weeks.

Let's start!

Javascript improvements (goodbye jQuery, welcome RPC)

The javascript client library previously had a dependency on jQuery for ajax and promises. This situation wasn't satisfying, because most HTML5 games don't use jQuery at all and the library is itself huge. We removed this dependency in the new stormancer.js version, and are using now ES6 promises if they are available with a polyfill for older browsers (I am looking at you IE10. Edge does have them, however)

The Rpc plugin is now available for javascript applications. It allows you to send requests to the server and get responses in a single method call. Notably, the Rpc plugin also enables the server to send requests to the client and receive responses.

Sending an rpc :

scene.getComponent("rpcService").rpc("rpc", "stormancer", function(packet) {
        // We deserialize the data received using MsgPack
        data = packet.readObject();
        // We test the received data
        if (data === "stormancer")
        {
            log("RPC: Response received (rpc client): " + data);
            log("disconnecting...");
            scene.disconnect().then(function(){
                log("disconnected");
            });
        }
    });

Creating a procedure that can be called by the server on the client:

// Add a route called 'rpc' to handle RPC requests coming from the server
scene.getComponent("rpcService").addProcedure("rpc", function(ctx) {
    log("RPC: Request received (rpc server)");
    // We send back the data to the server twice
    ctx.sendValue(ctx.data(), Stormancer.PacketPriority.MEDIUM_PRIORITY);
    ctx.sendValue(ctx.data(), Stormancer.PacketPriority.MEDIUM_PRIORITY);
     return Promise.resolve(); //Return a promise. The procedure is completed 
                               //on the server when the promise is resolved. 
                               //In this case, that's synchronously. But it could 
                               //be used to wait an asynchronous client operation 
                               //(player action, web request, whatever)
    }, true);//Messages are ordered

Resource limits API

The Resource limits web API allows to control how much memory and CPU an application can use on a single node. We are not fully satisfied with the current API however, so expect it to change in the future. (Sooner than later)

PUT:  /{accountId}/{application}/_scale
{
   nodeSize : 3
}

C++ improvements

We made a lot of change to the C++ client library to improve customization and performance. More precisely, we added the IScheduler class to let you choose the threading model for the network engine. The default implementation runs on a specific thread, but you could easily roll out your own to run it on your main event loop for instance (if single thread execution is what you want)

Furthermore, the synchronized clock is now available for C++ clients too. We are a little behind of schedule for the C++ RPC implementation, but it will come soon!

Improvements to the monitoring UX

Exploring logs using the API and management portal was far from easy when your application was producing a lot of logs. We added some options to the API (and exposed them in the portal) to let you filter logs by level, category or even perform a fulltext search in them.

log filtering

Stay tuned for new updates in the next days! We have a surprise for you. :)


No Comments

Post Reply

You must sign in to comment.