/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.eas.server.websocket;
import com.eas.script.Scripts;
import javax.websocket.ClientEndpoint;
import javax.websocket.CloseReason;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import jdk.nashorn.api.scripting.JSObject;
/**
*
* @author mg
*/
@ClientEndpoint
public class JsClientEndPoint {
protected WebSocketClientSession session;
protected JSObject onopen;
protected JSObject onclose;
protected JSObject onerror;
protected JSObject onmessage;
protected Scripts.LocalContext context;
protected Scripts.Space space;
/*
public JsClientEndPoint() {
super();
}
*/
public JsClientEndPoint(WebSocketClientSession aSession, Scripts.LocalContext aContext, Scripts.Space aSpace) {
super();
session = aSession;
context = aContext;
}
@OnMessage
public void onMessage(Session websocketSession, String aData) {
if (onmessage != null) {
space.process(context, () -> {
JSObject messageEvent = Scripts.getSpace().makeObj();
messageEvent.setMember("data", aData);
onmessage.call(session.getPublished(), new Object[]{messageEvent});
});
}
}
@OnOpen
public void onOpen(Session aSession) {
if (onopen != null) {
space.process(context, () -> {
onopen.call(session.getPublished(), new Object[]{});
});
}
}
@OnClose
public void onClose(Session websocketSession, CloseReason aReason) {
if (onclose != null) {
space.process(context, () -> {
JSObject closeEvent = Scripts.getSpace().makeObj();
closeEvent.setMember("wasClean", aReason.getCloseCode() == CloseReason.CloseCodes.NORMAL_CLOSURE);
closeEvent.setMember("code", aReason.getCloseCode().getCode());
closeEvent.setMember("reason", aReason.getReasonPhrase());
onclose.call(session.getPublished(), new Object[]{closeEvent});
});
}
}
@OnError
public void onError(Session websocketSession, Throwable aError) {
if (onerror != null) {
space.process(context, () -> {
JSObject errorEvent = Scripts.getSpace().makeObj();
errorEvent.setMember("message", aError.getMessage());
onerror.call(session.getPublished(), new Object[]{errorEvent});
});
}
}
public JSObject getOnopen() {
return onopen;
}
public void setOnopen(JSObject aValue) {
onopen = aValue;
}
public JSObject getOnclose() {
return onclose;
}
public void setOnclose(JSObject aValue) {
onclose = aValue;
}
public JSObject getOnerror() {
return onerror;
}
public void setOnerror(JSObject aValue) {
onerror = aValue;
}
public JSObject getOnmessage() {
return onmessage;
}
public void setOnmessage(JSObject aValue) {
onmessage = aValue;
}
}