what is this?
features
Installing | Downloads
Hello world!..a simple example

What exactly is this?

Thalassa is a lightweight implementation of the WAMP V2 protocol, written in php.

!What is

Thalassa is not a web-socket server.Although it is built upon web-sockets and fully implements the web-socket protocol,
Thalassa will only work for clients implementing WAMP as a websocket sub-protocol, and hence is better defined as a WAMP
server, as opposed to a WAMP-capable websocket server.

Features

Thalassa features an event-driven IO using libevent, and implements the role of a broker and a dealer.

Requirements

A working installation of the libevent library and necessary extensions.

Installing

Composer:

"require": {"nsautomaton/thalassa": "dev-master"}

new to composer? See installation and basic usage.

Hello world!

tag
namespace wampComponent;
use Thalassa\wampAppInterface;
use Thalassa\Dealer\proceduresInterface;
use Thalassa\Broker\channelsInterface;
class wampApp implements wampAppInterface{
    public function onOpen($conn, $sessionKey){}
	
    public function onSubscribe(channelsInterface $channelAccess, $conn, $requestID, $channel)
    {
    $channelAccess->add($conn, $channel, $requestID);
    }
   
    public function onUnsubscribe(channelsInterface $channelAccess, $conn, $channel, $requestID)
    {
    $channelAccess->delete($conn, $channel, $requestID);
    }
   
    public function onPublish(channelsInterface $channelAccess, $conn, array $data, array $options)
    {
    $channelAccess->broadcast($channelAccess, $conn, $data, $options);
    }

    public function onRegister(proceduresInterface $exe, $conn, $call, $requestID, array $options){}
	
    public function onUnregister(proceduresInterface $exe, $conn, $regID, $requestID){}
	
    public function onCall(proceduresInterface $exe, $conn, $call, array $args, array $options){}
	
    public function onError($conn, $details){}
	
    public function onClose($conn){}
}
	  

The snippet is a bare minimum of a wamp server.all it does is handle subscriptions and route
messages between subscribers.

In your project directory, create a folder "src", if it doesn't exist yet.

In "src", create a folder "wampComponent."

Save the code as "wampApp.php". Alternatively, you can save it as whatever_name_you_like,
provided the class name matches the file name.This is because we're using psr-0 autoloading.
Similarly, the folder "wampComponent" could be any name you like, as long as it matches the
namespace of the code that resides in it.

In your composer.json:

"autoload": {
    "psr-0": {
	    "wampComponent": "src"
    }
}

Update composer by re-running install to regenerate vendor/autoload.php:

composer install or composer update

...and now the shell script:

tag
use Thalassa\Server;
use wampComponent\wampApp;
require dirname(__DIR__) . '/vendor/autoload.php';
    $host = '0.0.0.0';
    $port = 9000;
$app = new wampApp;
$server = new Server($host, $port);
$server->Build($app);
$server->start();
	  

Create a folder "bin" and save the code simply as daemon.php

That's all.To start the server simply cd your way to to /bin and type the command:

php daemon.php

But wait!What about the client-side code?

Thalassa could work with any WAMP V2 client.See a list of clients and other routers For this tutorial Autobahn|JS is used.
Learn more and view the full Autobahn|JS documentation.

smlhtml_ml
smlhead_ml
smlmeta charset='utf-8'_ml
smlscript type="text/javascript" src="path_to_your_autobahn|js_copy"_mlemlscript_ml
smlscript type="text/javascript"_ml
function onevent(message)
{
console.log(message);
};
function send()
{
sess.publish("com.test.app", "Hello World", {exclude_me:false});
};
window.onload = function(){
var connection = new autobahn.Connection({url : 'ws://127.0.0.1:9000'});
	connection.onopen = function(session){
		       window.sess = session;
		       session.subscribe("com.test.app", onevent).then(
		               function(subscription)
			       {
			       console.log("subscription successful");			  
			       },
			       function(error)
			       {
			       console.log("subscription error");				  
			       });
		        console.log('Connection established');
    };
	connection.onclose = function(session){
		       console.log('Connection lost');
    };
	connection.open();
};
emlscript_ml
emlhead_ml
smlbody_ml
smlinput type='button' value="send the message!" onclick='send();'zml
emlbody_ml
emlhtml_ml