[[PageOutline]] = GeniusWeb ProfilesServer This is the home page of the GeniusWeb profiles server. This server serves domain and profile files to interested parties, and can inform them of changes. The profilesserver only **serves** profiles, it does not define them. To define profiles, check the geniusweb core pages. The GeniusWeb core/main page is [https://tracinsy.ewi.tudelft.nl/pubtrac/GeniusWeb here]. == Installation == * Install your apache-tomcat 8 installation ​https://tomcat.apache.org/download-80.cgi. You can re-use an existing installation. * Download the parties server war file from [http://artifactory.ewi.tudelft.nl/artifactory/webapp/#/artifacts/browse/tree/General/libs-release-local/geniusweb/profilesserver the artifactory]. Go into the latest version of the partiesserver and download (right click) the war file. NOTICE: your browser must have cookies enabled to access the artifactory. * Copy the downloaded war file into the tomcat webapps directory * (Re)start tomcat Now your local profilesserver should be up and running. After installing and starting, go to [http://localhost:8080/profilesserver-XXX] (replace XXX with the version you installed) to see if it works. = Communication protocol This section describes the communication protocols with the profilesserver. Other implementations of a profilesserver should adhere to the same communication protocols to ensure compatibility with geniusweb. == List of available profiles Clients can receive the list of available profiles as follows * create a websocket to the server at {{{ws:...profilesserver/websocket/liststream}}} * The server sends the clients a JSON map. The keys in the map are the websocket URI of the domain description. The values in the map are a list of available profiles for this domain, again websocket URIs. This map looks like this in JSON {{{ {"ws://...:8080/profilesserver/websocket/get/jobs": [ "ws://...:8080/profilesserver/websocket/get/jobs/jobs1", "ws://...:8080/profilesserver/websocket/get/jobs/jobs2" ] } }}} * A new, full list is sent every time something changes in the list. The java implementation provided here continuously checks the files inside the apache-tomcat directory {{{webapps/profilesserverXXX/domainsrepo}}}. If you drop or rename files in there, it is detected automatically, the files are (re) parsed and made available. This implementation also contains default profiles: ||= domain =||= profile =|| || jobs || jobs1, jobs2 || == Get a profile Clients can get the profile or domain description as follows * create a websocket to the address contained in the received profiles list (above). * The websocket receives the profile from the server in json format. * parse the json format either as Profile or as Domain, see the java example below. = Downloading a profile programatically This section gives an example on how to use the websocket to get a profile. To download a profile in your agent, create a websocket and fetch the profile. There are java examples available [source:src/test/java/geniusweb/examples here]. Basically you just open a websocket and read the incoming profile like this (NOTICE: this is using neovisionaries WebSocketAdapter which is an external library; but we recommend the java built-in javax.websocket, see the [source:src/test/java/geniusweb/examples examples]) {{{ WebSocketFactory factory = new WebSocketFactory().setConnectionTimeout(5000); WebSocket ws = factory.createSocket("ws://localhost:8080/profilesserver/websocket/get/jobs/jobs1"); ws.addListener(this); ... @Override public void onTextMessage(WebSocket websocket, String json) throws Exception { System.out.println("received profile: " + new ObjectMapper().readValue(json, Profile.class)); } }}} or, similarly in python {{{ class PythonDownloadProfile(WebSocketAdapter): ... factory = WebSocketFactory() factory.setConnectionTimeout(5000) ws = factory.createSocket("ws://localhost:8080/profilesserver/websocket/get/jobs/jobs1") ws.addListener(self) def onTextMessage(self, websocket, json): print "received message: "+json }}} == Using the source code == You can download the source repository. Note that you don't need this if you just want to use the profiles server. {{{ svn checkout https://tracinsy.ewi.tudelft.nl/svn/GeniusWebProfilesServer/ }}} Since this is a tomcat web application, you need Eclipse Enterprise edition if you want to run this from Eclipse. Also, to checkout from Eclipse, you need to prepare Eclipse for this. Check https://tracinsy.ewi.tudelft.nl/pubtrac/GeniusWeb/wiki/WikiStart It is maven based so you only need maven to compile the code.