package jj.engine;
import javax.inject.Inject;
import javax.inject.Singleton;
import jj.http.server.websocket.CurrentWebSocketConnection;
import jj.jjmessage.JJMessage;
import org.mozilla.javascript.BaseFunction;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.Undefined;
@Singleton
public class DoCallFunction extends BaseFunction implements HostObject {
private static final long serialVersionUID = 1L;
public static final String PROP_DO_CALL = "//doCall";
private final CurrentWebSocketConnection connection;
@Inject
public DoCallFunction(final CurrentWebSocketConnection connection) {
this.connection = connection;
}
@Override
public String name() {
return PROP_DO_CALL;
}
@Override
public boolean constant() {
return true;
}
@Override
public boolean readonly() {
return true;
}
@Override
public boolean permanent() {
return true;
}
@Override
public boolean dontenum() {
return true;
}
@Override
public Object call(Context cx, Scriptable scope, Scriptable thisObj, Object[] args) {
assert connection.current() != null : "cannot call remote functions without a connected client in context";
connection.current().send(JJMessage.makeCall(String.valueOf(args[0]), String.valueOf(args[1])));
return Undefined.instance;
}
@Override
public Scriptable construct(Context cx, Scriptable scope, Object[] args) {
throw new UnsupportedOperationException();
}
}