Browse Source

Basic concept working

master
Wesley Kerfoot 6 years ago
parent
commit
6241a613d6
  1. 13
      client.py
  2. 4
      server.rkt
  3. 9
      shelltalk.sh

13
client.py

@ -3,6 +3,7 @@
import socket import socket
import argparse import argparse
from base64 import b64encode, b64decode
from contextlib import closing from contextlib import closing
from json import loads from json import loads
@ -19,7 +20,7 @@ def read_log(pid):
if b"\n" in chunk: if b"\n" in chunk:
break break
return loads(b"".join(buf).decode("utf-8")) return [b64decode(l) for l in loads(b"".join(buf).decode("utf-8"))]
def spawn(pid): def spawn(pid):
with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s: with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s:
@ -29,7 +30,8 @@ def spawn(pid):
def write(pid, msg): def write(pid, msg):
with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s: with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s:
s.connect("/tmp/shelltalk.sock") s.connect("/tmp/shelltalk.sock")
s.send(("write {0} {1}\n".format(pid, msg)).encode("utf-8")) message = b64encode(msg.encode("utf-8"))
s.send(("write {0} {1}\n".format(pid, message.decode("utf-8"))).encode("utf-8"))
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
@ -51,10 +53,11 @@ parser.add_argument("-R",
args = parser.parse_args() args = parser.parse_args()
if args.spawn: if args.spawn:
print(spawn(*args.spawn)) spawn(*args.spawn)
if args.write: if args.write:
print(write(*args.write)) write(*args.write)
if args.read: if args.read:
print(read_log(*args.read)) for line in read_log(*args.read):
print(line)

4
server.rkt

@ -33,6 +33,7 @@
;; Message handling functions ;; Message handling functions
(define (write-to entries out) (define (write-to entries out)
(displayln entries)
(with-handlers ([exn:fail? (const '())]) (with-handlers ([exn:fail? (const '())])
(write-json entries out) (write-json entries out)
(display "\n" out))) (display "\n" out)))
@ -89,6 +90,7 @@
(match (string-split input-string) (match (string-split input-string)
[(list "spawn" pid) [(list "spawn" pid)
(displayln "got spawn") (displayln "got spawn")
(displayln pid)
(thread-send message-handler (cons 'spawn pid)) (thread-send message-handler (cons 'spawn pid))
(handle-connection in out)] (handle-connection in out)]
@ -99,6 +101,8 @@
[(list "write" pid message) [(list "write" pid message)
(displayln "got write") (displayln "got write")
(displayln pid)
(displayln message)
(thread-send message-handler (list 'log pid message)) (thread-send message-handler (list 'log pid message))
(handle-connection in out)] (handle-connection in out)]

9
shelltalk.sh

@ -0,0 +1,9 @@
# Place this in your ~/.bashrc file
function log() {
/home/wes/code/shelltalk/client.py -W "$$" "$(history 1)" > /dev/null 2>&1
}
/home/wes/code/shelltalk/client.py -S $$
export PROMPT_COMMAND="$PROMPT_COMMAND; log"
Loading…
Cancel
Save