summaryrefslogtreecommitdiff
path: root/asciifarm/client
diff options
context:
space:
mode:
Diffstat (limited to 'asciifarm/client')
-rw-r--r--asciifarm/client/display/display.py2
-rw-r--r--asciifarm/client/display/textinput.py1
-rw-r--r--asciifarm/client/gameclient.py24
-rw-r--r--asciifarm/client/inputhandling.hy55
-rw-r--r--asciifarm/client/keymacros.hy7
5 files changed, 67 insertions, 22 deletions
diff --git a/asciifarm/client/display/display.py b/asciifarm/client/display/display.py
index abc3616..8515d65 100644
--- a/asciifarm/client/display/display.py
+++ b/asciifarm/client/display/display.py
@@ -133,7 +133,7 @@ class Display:
def getString(self):
"""This does actually read input"""
- return self.textInput.getString()
+ return str(self.textInput.getString(), "utf-8")
def update(self):
changed = False
diff --git a/asciifarm/client/display/textinput.py b/asciifarm/client/display/textinput.py
index 6af5a78..f2f08a5 100644
--- a/asciifarm/client/display/textinput.py
+++ b/asciifarm/client/display/textinput.py
@@ -24,6 +24,7 @@ class TextInput:
self.reading = False
win.erase()
win.noutrefresh()
+ self.widget.change()
return string
def update(self):
diff --git a/asciifarm/client/gameclient.py b/asciifarm/client/gameclient.py
index b3b046b..6a80572 100644
--- a/asciifarm/client/gameclient.py
+++ b/asciifarm/client/gameclient.py
@@ -13,11 +13,7 @@ import string
from .display.display import Display
import hy
-
-hywrapper = """\
-(do
- (require [asciifarm.client.keymacros [*]])
- {{ {} }})"""
+from .inputhandling import InputHandler
class Client:
@@ -29,8 +25,10 @@ class Client:
self.connection = connection
self.logFile = logFile
- self.commands = hy.eval(hy.read_str(hywrapper.format(keybindings)))
- self.controlsString = self.commands.get("help", "")
+ self.inputHandler = InputHandler(self, self.display, self.connection)
+ self.inputHandler.readCommands(keybindings)
+
+ self.controlsString = self.inputHandler.getDocs()
self.display.showInfo(self.controlsString)
@@ -38,15 +36,6 @@ class Client:
def send(self, data):
self.connection.send(json.dumps(data))
- def getDisplay(self):
- return self.display
-
- def readString(self):
- text = self.display.getString()
- string = str(text, "utf-8")
- if string:
- self.connection.send(json.dumps(["input", ["say", string]]))
-
def start(self):
threading.Thread(target=self.listen, daemon=True).start()
self.connection.send(json.dumps(["name", self.name]))
@@ -126,8 +115,7 @@ class Client:
keyname = str(curses.keyname(key), "utf-8")
except ValueError:
continue
- if keyname in self.commands:
- self.commands[keyname](self)
+ self.inputHandler.onKey(keyname)
diff --git a/asciifarm/client/inputhandling.hy b/asciifarm/client/inputhandling.hy
new file mode 100644
index 0000000..8d19e4a
--- /dev/null
+++ b/asciifarm/client/inputhandling.hy
@@ -0,0 +1,55 @@
+
+(require [asciifarm.client.keymacros [*]])
+
+(defmacro eval-in-context [code]
+ `(
+ (eval `(do
+ (require [asciifarm.client.keymacros [*]])
+ (fn [client display connection]
+ ~~code)))
+ self.client
+ self.display
+ self.connection))
+
+(defmacro sendinput [message] `(
+ self.client.send ["input" ~message]))
+
+(defclass InputHandler []
+
+ (defn --init-- [self client display connection]
+ (setv self.client client)
+ (setv self.display display)
+ (setv self.connection connection)
+ (setv self.commands None))
+
+ (defn readCommands [self commandsstring]
+ (setv self.commands
+ (dict-comp
+ (eval key)
+ (
+ (eval `(do
+ (require [asciifarm.client.keymacros [*]])
+ (fn [handler]
+ (fn [] ~value))))
+ self)
+ [[key value] (.items (read-str commandsstring))])))
+
+ (defn runCommand [self commandstring]
+ (eval (read-str (+ "(" commandstring ")"))))
+
+ (defn parseMessage [self message]
+ (if message
+ (if (= (first message) "/")
+ (do
+ (setv msg (.join "" (drop 1 message)))
+ (if (= (first msg) "/")
+ (inp ["say" msg])
+ (self.runCommand msg)))
+ (inp ["say" message]))))
+
+ (defn getDocs [self]
+ (if (in "help" self.commands) ((get self.commands "help")) ""))
+
+ (defn onKey [self key]
+ (if (in key self.commands) ((get self.commands key))))
+)
diff --git a/asciifarm/client/keymacros.hy b/asciifarm/client/keymacros.hy
index b7ff113..595a98c 100644
--- a/asciifarm/client/keymacros.hy
+++ b/asciifarm/client/keymacros.hy
@@ -1,15 +1,16 @@
+
(defmacro send [data]
- `(fn [client] (client.send ~data)))
+ `(self.client.send ~data))
(defmacro inp [action]
`(send ["input" ~action]))
(defmacro doall [actions]
- `(fn [client] (for [action ~actions] (action client))))
+ `(for [action ~actions] (action)))
(defmacro selector [name]
- `(.getSelector (.getDisplay client) ~name))
+ `(self.display.getSelector ~name))
(defmacro selectorvalue [name]
`(.getValue (selector ~name)))