|
2 years ago | |
---|---|---|
.#code.org | 3 years ago | |
.gitignore | 3 years ago | |
.npmignore | 3 years ago | |
LICENSE.md | 3 years ago | |
README.html | 3 years ago | |
README.md | 2 years ago | |
config-example.js | 3 years ago | |
package-lock.json | 2 years ago | |
package.json | 2 years ago | |
process.js | 2 years ago | |
process.toml | 2 years ago | |
server.js | 2 years ago |
README.md
demonic server

A fake terminal cleans up user input and sends it to the server. The server then parses the input, and if it matches a predefined command, spawns a child process of that command/program. I really liked the ability to try out haskell interactively here and here, so this is something like that.
Try it out here.

Installation and Running
# install dependencies
npm install
# copy example config
cp config-example.js config.js
# edit key, certificate, and passphrase information
nano config.js
# run server (if no port number is provided, 12345 in this example, the server will default to port 8181)
node server.js 12345
# edit server information
nano demo.js
# then you can connect to the server from a client (e.g. client-example.html)
Uninstallation
# remove this directory
rm -rfI demo
Message Protocol
-
Connection is established between client and server.
-
Client sends server the command mode (and language if
mode
is set to 'code').
{
"mode": "shell",
}
{
"mode": "code",
"lang": "ruby",
}
-
Client sends server data on every keypress.
-
Server buffers the incoming data until a 'newline' charcter is received.
-
Server finds the program named in the input, and sends the contents of the input buffer to that program.
-
Server sends client the output of the command.
{
"out": "Wow, I'm in a shell!"
}
-
Client displays output on terminal.
-
Server sends client the exit status of the command.
{
"exit": 0
}
- Client displays user prompt on terminal.
Client to Server
mode: Keyword to inform server of expected behavior. Possible options are 'shell' and 'code'. lang: If mode is set to 'code', language specifies the respective programming language. content: The commands or code sent by the user to be evaulted by the server.
Server to Client
exit: Exit status of spawned process. control: Keyword to inform client that spawned process will handle output of characters (e.g. vim). Disables writing client-side as well as buffering server-side. out: STDOUT of the spawned process. err: STDERR of the spawned process.