mirror of https://github.com/balkian/SOJA.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
3.2 KiB
Java
135 lines
3.2 KiB
Java
package es.upm.dit.gsi.sojason.services.socketio;
|
|
|
|
import io.socket.IOAcknowledge;
|
|
import io.socket.IOCallback;
|
|
import io.socket.SocketIO;
|
|
import io.socket.SocketIOException;
|
|
|
|
import jason.asSyntax.Literal;
|
|
|
|
import java.net.MalformedURLException;
|
|
import java.util.logging.Logger;
|
|
|
|
import net.sf.json.JSONArray;
|
|
import net.sf.json.JSONException;
|
|
import net.sf.json.JSONObject;
|
|
import es.upm.dit.gsi.jason.utils.CollectionUtils;
|
|
import es.upm.dit.gsi.sojason.SOModel;
|
|
import es.upm.dit.gsi.sojason.services.AsyncWebServiceConnector;
|
|
|
|
/**
|
|
* Project: Web40SOJason
|
|
* Package: es.upm.dit.gsi.sojason.services.nlu
|
|
* Class: NLUConnector
|
|
*
|
|
* @author Miguel Coronado (miguelcb@dit.upm.es)
|
|
* @version Feb 27, 2012
|
|
*
|
|
*/
|
|
public class SocketIOConnector implements AsyncWebServiceConnector{
|
|
|
|
/** The url of the service */
|
|
private String serviceUrl;
|
|
/** */
|
|
private Logger logger = Logger.getLogger("Web40SOJason." + SocketIOConnector.class.getName());
|
|
|
|
private static SocketIO socket;
|
|
static IOCallback callback = new IOCallback() {
|
|
|
|
public void onMessage(JSONObject json, IOAcknowledge ack) {
|
|
System.out.println("Message:" + json.toString());
|
|
}
|
|
|
|
@Override
|
|
public void onMessage(String data, IOAcknowledge ack) {
|
|
System.out.println("Message:" + data);
|
|
}
|
|
|
|
@Override
|
|
public void onError(SocketIOException socketIOException) {
|
|
System.out.println("Error");
|
|
socketIOException.printStackTrace();
|
|
}
|
|
|
|
@Override
|
|
public void onDisconnect() {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void onConnect() {
|
|
}
|
|
|
|
@Override
|
|
public void on(String event, IOAcknowledge ack, Object... args) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void onMessage(org.json.JSONObject arg0, IOAcknowledge arg1) {
|
|
// TODO Auto-generated method stub
|
|
|
|
}
|
|
};
|
|
|
|
|
|
//TODO Remove try-catch
|
|
/** Constructor */
|
|
public SocketIOConnector(String serviceUrl) {
|
|
this.serviceUrl = serviceUrl;
|
|
|
|
try {
|
|
socket = new SocketIO();
|
|
socket.connect(serviceUrl, callback);
|
|
} catch (MalformedURLException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public boolean call(final SOModel model, final String agName, String... params) {
|
|
logger.info("Calling SocketIOConnector with"+params[0]);
|
|
try {
|
|
socket.emit("test", new IOAcknowledge() {
|
|
@Override
|
|
public void ack(Object... args) {
|
|
logger.info("Package ack'ed");
|
|
String str = CollectionUtils.toPercepts(args);
|
|
Literal lit = Literal.parseLiteral(str);
|
|
model.setDataInbox(agName, lit);
|
|
logger.info("DataInbox set to "+str);
|
|
}
|
|
}, new JSONObject().put("Sending", "From Jason"));
|
|
} catch (JSONException e) {
|
|
// TODO Auto-generated catch block
|
|
e.printStackTrace();
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* This validates the parameters received. The
|
|
* {@link SocketIOConnector#call(String...)} method expects to receive two
|
|
* parameters of the nature and characteristics described below:
|
|
*
|
|
* <ul>
|
|
* <li>The first parameter is que query id. It is an alphanumeric string
|
|
* which normally will contain numbers, but other non-digit characters
|
|
* are permitted. <b>No alphanumeric values are not allowed</b></li>
|
|
* <li></li>
|
|
* </ul>
|
|
*
|
|
*/
|
|
public boolean validateParams(String... params) {
|
|
if (params.length != 2){
|
|
return false;
|
|
}
|
|
// TODO: check other things
|
|
return true;
|
|
}
|
|
|
|
}
|