<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/__init__.py</filename>
    </added>
    <added>
      <filename>lib/defaults.py</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,9 +1,106 @@
 #!/usr/bin/env python
-import sys, curses, socket
+from __future__ import with_statement
+import sys, curses, socket, threading, select
+
+from lib import defaults
+
+class EventQueue(object):
+    def __init__(self, sock):
+        self._queue = []
+        self._queue_lock = threading.RLock()
+        self._sock = sock
+    
+    def popEvent(self):
+        with self._queue_lock:
+            if len(self._queue) == 0:
+                return None
+            return self._queue.pop()
+    
+    def pushEvent(self, e):
+        with self._queue_lock:
+            self._queue.append(e)
+    
+    def __call__(self):
+        #handler to push events as we recieve them from the server
+        while 1:
+            inp, out, exc = select.select([],[self._sock],[])
+            e = get_event(self._sock)
+            self.pushEvent(e)
+            if e.event_type == defaults.QUIT_EVENT_TYPE:
+                break
+
+class UI(object):
+    def __init__(self, window, queue):
+        self._window = window
+        self._window_lock = threading.RLock()
+        self._queue = queue
+        self._map = [
+            &quot;###############&quot;,
+            &quot;#      #      #&quot;,
+            &quot;#             #&quot;,
+            &quot;#      ### ####&quot;,
+            &quot;#### ###   #  #&quot;,
+            &quot;#          #  #&quot;,
+            &quot;#          #  #&quot;,
+            &quot;#             #&quot;,
+            &quot;#          #  #&quot;,
+            &quot;###############&quot;
+        ]
+        self._player_pos = {'x':1,'y':1}
+        self._player_lock = threading.RLock()
+    
+    def redraw(self):
+        with self._window_lock:
+            for yy in range(10):
+                for xx in range(15):
+                    self._window.addch(yy,xx,self._map[yy][xx])
+            with self._player_lock:
+                window.addch(self._player_pos['y'],self._player_pos['x'],'@')
+    
+    def update_player(self, newD):
+        with self._player_lock:
+            self._player_pos = newD
+    
+    def __call__(self):
+        #handler for user input
+        #should insert events for all user input into central queue
+        while 1:
+            c=window.getch()
 
 def main():
+    global DEFAULT_PORT
     if len(sys.argv) == 1:
         sys.stderr.write(&quot;usage: python client.py server[:port]\n&quot;)
         sys.exit(1)
+    
+    server_spec = sys.argv[1].split(&quot;:&quot;)
+    if len(server_spec) == 2:
+        server, port = server_spec[0],server_spec[1]
+    else:
+        server = server_spec
+        port = defaults.DEFAULT_PORT
+    
+    del server_spec
+    
+    server_conn = socket.socket()
+    server_conn.connect((server,port))
+    myQueue = EventQueue(server_conn)
+    queueThread = threading.Thread(myQueue)
+    queueThread.start()
+    
+    
+    window = curses.initscr()
+    window.keypad(1)
+    curses.curs_set(0)
+    myUI = UI(window, myQueue)
+    uiThread = threading.thread(myUI)
+    
+    while 1:
+        e = myQueue.popEvent()
+        if e is not None:
+            res = e(myQueue, myUI)
+            if res.get('quit', False): break
 
-if __name__ == &quot;__main__&quot;: main()
+if __name__ == &quot;__main__&quot;:
+    main()
+    curses.endwin()</diff>
      <filename>client/client.py</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>d1e7bfccd0a3a21254764bc4884553a048f4c789</id>
    </parent>
  </parents>
  <author>
    <name>Silas Snider</name>
    <email>swsnider@gmail.com</email>
  </author>
  <url>http://github.com/swsnider/mmo/commit/247f0e450fdc37ea2f5deca7aaac20ec5904b220</url>
  <id>247f0e450fdc37ea2f5deca7aaac20ec5904b220</id>
  <committed-date>2008-07-29T22:21:25-07:00</committed-date>
  <authored-date>2008-07-29T22:21:25-07:00</authored-date>
  <message>more client code. Does it work?</message>
  <tree>0e7cee5aa6a19bac838d68cbd1fd2b4e3a62b693</tree>
  <committer>
    <name>Silas Snider</name>
    <email>swsnider@gmail.com</email>
  </committer>
</commit>
