diff options
| author | makefu <github@syntax-fehler.de> | 2013-11-19 08:38:38 +0100 | 
|---|---|---|
| committer | makefu <github@syntax-fehler.de> | 2013-11-19 08:39:03 +0100 | 
| commit | b2bdf4e508bd6c58445de4ad302c656a8cf2e983 (patch) | |
| tree | d2aa1691341fd58b66106ca76debb02aabbb45b9 | |
| parent | 5788b95fe7834d3049df9de1009f3d8dbc34fea2 (diff) | |
cholerab-live -> graveyard
| -rw-r--r-- | .graveyard/cholerab-live/README (renamed from cholerab/cholerab-live/README) | 0 | ||||
| -rw-r--r-- | .graveyard/cholerab-live/chol_net.py (renamed from cholerab/cholerab-live/chol_net.py) | 0 | ||||
| -rw-r--r-- | .graveyard/cholerab-live/chol_net.pyc (renamed from cholerab/cholerab-live/chol_net.pyc) | bin | 4361 -> 4361 bytes | |||
| -rwxr-xr-x | .graveyard/cholerab-live/cholerab.py (renamed from cholerab/cholerab-live/cholerab.py) | 0 | ||||
| -rwxr-xr-x | .graveyard/cholerab-live/live.sh (renamed from cholerab/too_old/live.sh) | 0 | ||||
| -rw-r--r-- | .graveyard/cholerab-live/makefu/README | 6 | ||||
| -rw-r--r-- | .graveyard/cholerab-live/makefu/chol_net.py | 82 | ||||
| -rwxr-xr-x | .graveyard/cholerab-live/makefu/cholerab.py | 36 | ||||
| -rw-r--r-- | .graveyard/cholerab-live/makefu/view.py (renamed from cholerab/cholerab-live/view.py) | 0 | ||||
| -rwxr-xr-x | .graveyard/cholerab-live/ttycnser.sh (renamed from cholerab/too_old/ttycnser.sh) | 0 | ||||
| -rw-r--r-- | .graveyard/cholerab-live/view.py | 112 | 
11 files changed, 236 insertions, 0 deletions
| diff --git a/cholerab/cholerab-live/README b/.graveyard/cholerab-live/README index b778b98c..b778b98c 100644 --- a/cholerab/cholerab-live/README +++ b/.graveyard/cholerab-live/README diff --git a/cholerab/cholerab-live/chol_net.py b/.graveyard/cholerab-live/chol_net.py index ee0f5378..ee0f5378 100644 --- a/cholerab/cholerab-live/chol_net.py +++ b/.graveyard/cholerab-live/chol_net.py diff --git a/cholerab/cholerab-live/chol_net.pyc b/.graveyard/cholerab-live/chol_net.pycBinary files differ index 0694ad6d..0694ad6d 100644 --- a/cholerab/cholerab-live/chol_net.pyc +++ b/.graveyard/cholerab-live/chol_net.pyc diff --git a/cholerab/cholerab-live/cholerab.py b/.graveyard/cholerab-live/cholerab.py index eb9e66df..eb9e66df 100755 --- a/cholerab/cholerab-live/cholerab.py +++ b/.graveyard/cholerab-live/cholerab.py diff --git a/cholerab/too_old/live.sh b/.graveyard/cholerab-live/live.sh index 62a2c3cf..62a2c3cf 100755 --- a/cholerab/too_old/live.sh +++ b/.graveyard/cholerab-live/live.sh diff --git a/.graveyard/cholerab-live/makefu/README b/.graveyard/cholerab-live/makefu/README new file mode 100644 index 00000000..b778b98c --- /dev/null +++ b/.graveyard/cholerab-live/makefu/README @@ -0,0 +1,6 @@ + +view.py: contains view classes for cholerab +cholerab.py: main file + +start with : +python cholerab.py diff --git a/.graveyard/cholerab-live/makefu/chol_net.py b/.graveyard/cholerab-live/makefu/chol_net.py new file mode 100644 index 00000000..ee0f5378 --- /dev/null +++ b/.graveyard/cholerab-live/makefu/chol_net.py @@ -0,0 +1,82 @@ +from socket import socket, AF_INET,SOCK_DGRAM,IPPROTO_UDP,SOL_SOCKET,SO_REUSEADDR,IP_MULTICAST_TTL,IP_MULTICAST_LOOP,INADDR_ANY,inet_aton,IP_ADD_MEMBERSHIP,IPPROTO_IP +import struct +import threading  +import logging +log = None +from select import select +GROUP = '224.110.42.23' +PORT  = 42023 +log = logging.getLogger('CholerabNet') +class CholerabMulicastNet(threading.Thread): +  def __init__(self,cholerab,group=GROUP,port=PORT): +    threading.Thread.__init__(self) +    self.cholerab=cholerab +    self.group=group +    self.port=port +    self.initSocket() +  def send_char(self,x,y,char): +    """ translates given params into network message """ +    self.send_mc("%s %d %d" %(str(ord(char)),x,y)) +  def send_mc(self,arg): +    """ Sends message via multicast""" +    try: +      log.debug("Sending '%s' to %s:%d" % (arg,self.group,self.port))  +      self.ignore_next += 1# we need this to work together correctly with reused sockets +      self.s.sendto("%s" % arg,0,(self.group,self.port)) +    except Exception ,e: +      self.ignore_next -=1 +      log.error("IN send_mc:%s"%str(e)) + +  def initSocket (self,rcv=1): +    ''' Initializes a Multicast socket ''' +    host = '' +    log.debug("Setting up Multicast Socket") +    self.s = socket(AF_INET,SOCK_DGRAM, IPPROTO_UDP) +    self.s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) +    self.s.setsockopt(IPPROTO_IP, IP_MULTICAST_TTL, 32) +    self.s.setsockopt(IPPROTO_IP,IP_MULTICAST_LOOP,1) # we do not want our own packets to be replayed  +    if rcv==1: +      log.debug("Configuring for Read AND Write") +      self.s.bind((host,PORT)) +      mreq = struct.pack("4sl", inet_aton(GROUP), INADDR_ANY) +      self.s.setsockopt(IPPROTO_IP,IP_ADD_MEMBERSHIP,mreq) +  def run(self): +    self.running = 1 +    self.ignore_next = 0 +    while self.running: +      # break if we do not want to loop on +      ready,output,exception = select([self.s],[],[],1) # try every second +      for r in ready: +        if r == self.s: +          log.debug(str(self.ignore_next)) +          (data,addr) = self.s.recvfrom(1024) +          if not self.ignore_next: +            log.debug("Received Data from %s, data %s"%(str(addr),str(data))) +            self.receive_net(addr,data) +          else: +            self.ignore_next -= 1  + +  def send_stupid(self,addr): +    """ sends YOU ARE MADE OF STUPID to the right host """ +    #TODO implement me +    pass + +  def receive_net(self,addr,data): +    """ resolves which nick sent the message +    TODO handle user resolution in mulicast """ +    try:  +      address,port = addr +      arr = str(data).split() +      char = arr[0] +      x = arr[1] +      y = arr[2] +      self.cholerab.write_char(int(x),int(y),chr(int(char))) +    except Exception, e: +      log.error("Triggered YOU ARE MADE OF STUPID: %s" % str(e)) +      self.send_stupid(addr) + +  def stop(self): +    ''' +    stops the whole treading stuff gracefully +    ''' +    self.running=0 diff --git a/.graveyard/cholerab-live/makefu/cholerab.py b/.graveyard/cholerab-live/makefu/cholerab.py new file mode 100755 index 00000000..eb9e66df --- /dev/null +++ b/.graveyard/cholerab-live/makefu/cholerab.py @@ -0,0 +1,36 @@ +#!/usr/bin/python2 +# -*- coding: utf-8 -*- +import curses,time +from view import CursesView +from chol_net import CholerabMulicastNet +import logging +logging.basicConfig(filename='here.log',level=logging.DEBUG) +log = logging.getLogger('main') +class Cholerab: +  def __init__(self): +    self.view = CursesView(cholerab=self) +    self.transport = CholerabMulicastNet(cholerab=self) +  def send_char(self,x,y,char): +    log.info("Sending %s at (%d,%d) to connected peers" %(char,x,y)) +    self.transport.send_char(x,y,char) + +  def write_char(self,x,y,char): +    log.info("Writing %s at (%d,%d) to view" %(char,x,y)) +    self.view.write_char(x,y,char,user=2) +  def stop(self): +    self.view.stop() +    self.transport.stop() +  def main(self): +    self.view.start() +    self.transport.start() +    self.view.join() +    #after view dies, kill the transport as well +    self.transport.stop()  +    self.transport.join() +def main(): +  log.debug('started main') +  chol = Cholerab() +  chol.main() + +if __name__ == "__main__": +  main() diff --git a/cholerab/cholerab-live/view.py b/.graveyard/cholerab-live/makefu/view.py index 6a75f655..6a75f655 100644 --- a/cholerab/cholerab-live/view.py +++ b/.graveyard/cholerab-live/makefu/view.py diff --git a/cholerab/too_old/ttycnser.sh b/.graveyard/cholerab-live/ttycnser.sh index 0972dbbb..0972dbbb 100755 --- a/cholerab/too_old/ttycnser.sh +++ b/.graveyard/cholerab-live/ttycnser.sh diff --git a/.graveyard/cholerab-live/view.py b/.graveyard/cholerab-live/view.py new file mode 100644 index 00000000..6a75f655 --- /dev/null +++ b/.graveyard/cholerab-live/view.py @@ -0,0 +1,112 @@ +#!/usr/bin/python2 + +from curses import * +import socket +import threading +import logging +log = logging.getLogger('cholerab-curses') + +class CursesView(threading.Thread): +  def addch(self,char): +    """ +    adds a char at the current cursor position +    abstraction to the curses win.addch() +    """ +    try: self.win.addch(char) +    except: pass +    self.cholerab.send_char(self.x,self.y,chr(char)) +  def stop(self): +    #TODO setting back the whole terminal currently does not work correctly, fix me harder +    self.running = False +    self.clear() +    self.win.refresh() +    nocbreak(); self.scr.keypad(0); echo() +    #endwin() + +  def run(self): +    """ +    input loop + +    TODO add Unicode Input Support +    """ +    self.running = True +    def try_move(x,y): +      if x >= self.width: x = 0;y = y+1 +      if x < 0 : x = self.width-1; y= y-1 +      if y >= self.height : x = x+1;y = 0 +      if y < 0 : x = x-1; y = self.height-1 +      self.win.move(y,x); return x,y + +    while self.running: +      c = self.scr.getch() #get_char(self.scr)  +                           #TODO UTF8 here, get_wch not yet implemented +      log.debug("Pressed : %d" % c) +      if c == KEY_LEFT : self.x -=1 +      elif c == KEY_RIGHT : self.x +=1 +      elif c == KEY_UP : self.y -=1 +      elif c == KEY_DOWN : self.y +=1 +      elif c == ord('q') : self.stop() +      elif c == 127 or c == KEY_BACKSPACE:  +        log.info('backspace pressed') +        self.x -=1;  +        self.x,self.y = try_move(self.x,self.y) +        self.addch(ord(' ')) +      elif c == ord('\n'):  +        log.info('enter pressed') +        self.y +=1;  +        self.x,self.y = try_move(self.x,self.y) +      else :  +        self.addch(c)  +        self.x +=1 +      self.x,self.y = try_move(self.x,self.y) +      self.refresh() + +  def write_char(self,x,y,char,user=1): +    user = user % 3 + 1 +    self.win.addch(y,x,char,color_pair(user)) +    self.win.move(self.y,self.x) +    self.refresh() +  def write_str(self,x,y,string,user=1): +    self.win.addstr(y,x,string,color_pair(user)) +    self.win.move(self.y,self.x) +    self.refresh() +  def refresh(self): +    self.scr.refresh() +    self.win.refresh() +  def clear(self): +    self.win.clear() +    pass +  def write_field(self,ar): +    """ +    writes the whole field with given 2-dimensional array +    """ +    self.clear() +    pass + +  def __init__(self,height=24,width=80,cholerab=None,scr=None): +    # TODO handle sessions somehow +    if scr: +     self.scr = scr +    else: +     self.scr = initscr() +    start_color() +    init_pair(1,COLOR_WHITE,COLOR_BLACK) +    init_pair(2,COLOR_RED,COLOR_BLACK) +    init_pair(3,COLOR_GREEN,COLOR_BLACK) +    init_pair(3,COLOR_CYAN,COLOR_BLACK) +    threading.Thread.__init__(self) +    self.cholerab = cholerab + +    noecho() +    cbreak() +    self.scr.keypad(1) +    try: curs_set(2) +    except: pass # go home with your non-standard terminals! + +    begin_x = 0;begin_y = 0 +    self.height = height +    self.width = width +    self.x = 0 ; self.y = 0 + +    self.win = newwin(height,width,begin_y,begin_x) +    self.clear() | 
