diff --git a/src/main/java/net/coding/ide/config/WebSocketConfig.java b/src/main/java/net/coding/ide/config/WebSocketConfig.java index c2e14af..e2d79b4 100644 --- a/src/main/java/net/coding/ide/config/WebSocketConfig.java +++ b/src/main/java/net/coding/ide/config/WebSocketConfig.java @@ -38,6 +38,9 @@ public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Value("#{'${ALLOWED_ORIGINS}'.split(',')}") private String[] allowedOrigins; + @Value("${SPACE_HOME}") + private String spaceHome; + @Autowired private WebSocketSessionStore webSocketSessionStore; @@ -82,6 +85,7 @@ public ServletRegistrationBean servletRegistrationBean() { bean.addInitParameter("socketio-heartbeat", "15000"); bean.addInitParameter("socketio-suspendTime", "30000"); bean.addInitParameter("org.atmosphere.cpr.sessionSupport", "true"); + bean.addInitParameter("SPACE_HOME", spaceHome); bean.setLoadOnStartup(100); bean.setAsyncSupported(true); diff --git a/src/main/java/net/coding/ide/model/Message.java b/src/main/java/net/coding/ide/model/Message.java index 5efbed2..808dd44 100644 --- a/src/main/java/net/coding/ide/model/Message.java +++ b/src/main/java/net/coding/ide/model/Message.java @@ -30,5 +30,7 @@ public static class Arg { private String input; private String cwd; + + private String spaceKey; } } diff --git a/src/main/java/net/coding/ide/tty/SocketIOHandler.java b/src/main/java/net/coding/ide/tty/SocketIOHandler.java index fc31063..eef7470 100644 --- a/src/main/java/net/coding/ide/tty/SocketIOHandler.java +++ b/src/main/java/net/coding/ide/tty/SocketIOHandler.java @@ -21,12 +21,15 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.File; import java.io.IOException; import java.util.Collection; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import static java.lang.String.format; + /** * Simple SocketIOAtmosphereHandler that implements the logic to build a * SocketIO Chat application. @@ -44,7 +47,6 @@ public class SocketIOHandler extends SocketIOAtmosphereHandler { public void onConnect(AtmosphereResource r, SocketIOSessionOutbound outbound) throws IOException { log.debug("onConnect"); - outbound.sendMessage("0{\"sid\":\"" + outbound.getSessionId() + "\",\"upgrades\":[],\"pingInterval\":25000,\"pingTimeout\":60000}"); } @@ -58,11 +60,18 @@ public void onMessage(AtmosphereResource r, SocketIOSessionOutbound outbound, St String name = msg.getName(); + String spaceHome = r.getAtmosphereConfig().getInitParameter("SPACE_HOME", null); + + if (spaceHome == null) { + log.error("SocketIOHandler on message error: SPACE_HOME must be setted in env"); + return; + } + Message.Arg arg = msg.getArgs().get(0); switch (name) { case "term.open": - itermOpen(outbound, arg); + itermOpen(outbound, spaceHome, arg); break; case "term.input": itermInput(outbound, arg); @@ -103,11 +112,15 @@ private void itermResize(SocketIOSessionOutbound outbound, Message.Arg arg) { } } + private String getWorkdingDir(String spaceHome, String spaceKey) { + return format("%s/%s/%s", spaceHome, spaceKey, "/working-dir"); + } + private String makeConnectorKey(String session, String termId) { return session + "-" + termId; } - public void itermOpen(SocketIOSessionOutbound outbound, Message.Arg arg) { + public void itermOpen(SocketIOSessionOutbound outbound, String spaceHome, Message.Arg arg) { try { Map envs = Maps.newHashMap(System.getenv()); @@ -125,7 +138,7 @@ public void itermOpen(SocketIOSessionOutbound outbound, Message.Arg arg) { outbound, command, envs, - null); + getWorkdingDir(spaceHome, arg.getSpaceKey())); String key = makeConnectorKey(outbound.getSessionId(), arg.getId());