JavaScript is back!

With the release of SFS2X 2.13 last week we’re happy to reintroduce JavaScript as a server side language. For those familiar with the history of SmartFoxServer, JavaScript has been available since the early days of SFS PRO for writing server side code, and it’s now coming back thanks to the latest improvements in JDK 7 and 8.

Continue reading

SmartFoxServer 2.12 is out

SmartFoxServer 2X 2.12 is out with a host of new features and fixes, such as:

  • JoinRoomInvite, allows players to invite other clients in a game Room to play, available also from client side
  • Private UserVariables, allow to create UserVariables that are local to the player, and not broadcast to other clients
  • Updated Jetty version 9.3 for web services (BlueBox, uploads, crypto init)
  • Support IP ranges for black/white lists in IP Filter
  • AdminTool support for TLS encrypted connection
  • Embedded Java 8 runtime

… and lots more!

You can read the full release notes and download the installer from here.
Also make sure to check the Client API download page where we have published updates for all supported clients (API release 1.7.x).

Using the geolocation API

The following instructions are valid for al SFS2X prior to version 2.12. See the last section at the bottom for more recent releases.

SmartFoxServer 2X comes with a geolocation API and database that are used mainly in the AdminTool’s Analytics module to aggregate and show statistics based on geographical positions. The API is not directly exposed to developers but since it’s been requested several times here is a quick recipe on how to use geolocation in your Extension code.

For starters we need to add lib/logs-analysis-app.jar to our project’s dependencies and import a couple of classes:

import com.maxmind.geoip.Country;
import com.smartfoxserver.v2.admin.utils.IpGeoLocator;

NOTE: starting from SmartFoxServer 2X v2.12, the com.maxmind.geoip.Country class has been replaced by com.maxmind.geoip2.record.Country; change the above import accordingly.

Next we instantiate and initialize the IpGeoLocator class:

IpGeoLocator geo = new IpGeoLocator();
geo.init("data/", false);

This tells the geolocation service to load the relative database, located under SFS2X/data/. Finally we can test the service with an IP address:

String ipAdr = "208.80.154.224"; // wikipedia's IP

// Locate address
Country country = geo.locateIP(adr);

if (country == null)
   System.out.println("Not found for address: " + ipAdr);
else
   System.out.println(ipAdr + ": " + countrt.getName() + ", " + country.getCode();

Running the code results in this output:

208.80.154.224: United States, US

NOTE: it is important to always check that the returned Country object is not null. If it is, the geolocation service was not able to resolve the IP to a specific country.

» SFS2X 2.12.x and higher

SFS2X 2.12 introduced automatic geolocation for every client. The setting is configurable per-Zone from the AdminTool > Zone Configurator > Enable Geolocation.

When the service is active we can access the geolocation data with a few lines of server side code:

import com.smartfoxserver.v2.util.Country;

class MyHandler extends BaseClientRequestHandler
{
	void handleClientRequest(User sender, ISFSObject params)
	{
		Country ctry = sender.getCountry();
		
		if (ctry != null)
		{
			trace("User's country: " + ctry.getName());
			trace("Country ISO code: " + ctry.getIsoCode());
		}
	}
}