Author: dylan
Date: 2006-08-27 13:41:19 -0400 (Sun, 27 Aug 2006)
New Revision: 982

Modified:
   trunk/
   trunk/python/server/
   trunk/python/server/.todo
   trunk/python/server/haver.tac
   trunk/python/server/haver/
   trunk/python/server/haver/server/
   trunk/python/server/haver/server/entity.py
   trunk/python/server/haver/server/states.py
   trunk/python/server/haver/server/talker.py
Log:
Cleaning up the codebase a bit.
Removed todo item..


Property changes on: trunk
___________________________________________________________________
Name: svk:merge
   - 1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/havercurs-objc:43089
1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local/trunk:11166
1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local/trunk-merge-10131:11178
1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/winch/trunk:43192
27e50396-46e3-0310-8b22-ae223a1f35ce:/local:212
ca0be05d-e60e-0410-9596-96133d777aec:/haver/local:3262
e9404bb1-7af0-0310-a7ff-e22194cd388b:/haver/local:2455
edfcd8bd-4ce7-0310-a97e-bb1efd40edf3:/local:238
   + 1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/havercurs-objc:43089
1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local/trunk:11166
1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/local/trunk-merge-10131:11178
1f59643a-e6e5-0310-bc24-f7d4c744f460:/haver/winch/trunk:43192
27e50396-46e3-0310-8b22-ae223a1f35ce:/local:212
ca0be05d-e60e-0410-9596-96133d777aec:/haver/local:3441
e9404bb1-7af0-0310-a7ff-e22194cd388b:/haver/local:2455
edfcd8bd-4ce7-0310-a97e-bb1efd40edf3:/local:238


Property changes on: trunk/python/server
___________________________________________________________________
Name: svn:ignore
   + *.pyc


Modified: trunk/python/server/.todo
===================================================================
--- trunk/python/server/.todo   2006-05-22 02:45:37 UTC (rev 981)
+++ trunk/python/server/.todo   2006-08-27 17:41:19 UTC (rev 982)
@@ -1,20 +1,11 @@
 <todo version="0.1.19">
-    <note priority="high" time="1148263802" done="1148265858">
-        Bug: when a client connection crashes (raises an exception), make sure 
to remove a user from all joined channels...
-        <comment>
-            Fixed.
-        </comment>
+    <title>
+        haverd-python
+    </title>
+    <note priority="veryhigh" time="1156689825">
+        Add support for authentication
     </note>
-    <note priority="high" time="1148263853" done="1148265872">
-        Bug: PART main shows unknown.user main...
-        <comment>
-            Fixed.
-        </comment>
-    </note>
-    <note priority="medium" time="1148263612">
+    <note priority="low" time="1151301454">
         Add a command to list groups a user belongs to.
     </note>
-    <note priority="medium" time="1148265840">
-        BUG: 'USERS' without an argument shouldn't crash the client connection.
-    </note>
 </todo>


Property changes on: trunk/python/server/haver
___________________________________________________________________
Name: svn:ignore
   + *.pyc



Property changes on: trunk/python/server/haver/server
___________________________________________________________________
Name: svn:ignore
   + *.pyc


Modified: trunk/python/server/haver/server/entity.py
===================================================================
--- trunk/python/server/haver/server/entity.py  2006-05-22 02:45:37 UTC (rev 
981)
+++ trunk/python/server/haver/server/entity.py  2006-08-27 17:41:19 UTC (rev 
982)
@@ -15,25 +15,25 @@
 
 class Entity(object):
        def __init__(self, name):
-               assert_name(name)
-               self.attr = {}
-               self.__name = name
+               self.name = name
 
        def __str__(self):
-               return self.__name
-       
+               return self.namespace + "/" + self.__name
+
+       def getInfo(self): return [ ]
        def getName(self): return self.__name
        def delName(self): del self.__name
        def setName(self, name):
                assert_name(name)
                self.__name = name
 
-       def getInfo(self): return [ ]
        name = property(getName, setName, delName, "I'm the 'name' property.")
        info = property(lambda self: self.getInfo())
-
+       
 class Avatar(Entity):
-       def __init__(self, name, address = '0.0.0.0', version = None, talker  = 
None):
+       def __init__(self, name,
+                       address  = '0.0.0.0', version = None,
+                       passcode = None,      talker  = None):
                Entity.__init__(self, name)
                
                self.address       = mask_ip(address)
@@ -89,7 +89,9 @@
 
        def getIdle(self):
                return int(time.time()) - self.lastActivity
-               
+       
+       idle  = property(getIdle)
+       
        def getInfo(self):
                infos = Avatar.getInfo(self)
                if self.email is not None:
@@ -99,7 +101,6 @@
 
                return infos
 
-       idle     = property(getIdle)
 
 class Group(Entity):
        namespace = 'group'
@@ -154,6 +155,7 @@
                return ents.values()
 
 class Lobby(Group):
+       namespace = 'lobby'
        def __init__(self):
                Group.__init__(self, '&lobby')
 
@@ -162,4 +164,3 @@
                        return self
                else:
                        return Group.lookup(self, ns, name)
-                       

Modified: trunk/python/server/haver/server/states.py
===================================================================
--- trunk/python/server/haver/server/states.py  2006-05-22 02:45:37 UTC (rev 
981)
+++ trunk/python/server/haver/server/states.py  2006-08-27 17:41:19 UTC (rev 
982)
@@ -1,18 +1,18 @@
 from haver.server.entity import User, Group
 from haver.server.errors import Fail, Bork
 
-class State:
+class State(object):
        def __init__(self, talker):
-               self.talker = talker
-               self.factory = talker.factory
+               self.talker       = talker
+               self.lobby        = talker.lobby
+               self.talker.state = self
 
        def sendMsg(self, *args):
                self.talker.sendMsg(*args)
 
        def switchState(self, stateClass):
                print "Switching state to %s" % stateClass.__name__
-               state = stateClass(self.talker)
-               self.talker.state = state
+               stateClass(self.talker)
 
        def default_msg(self, name, args):
                print "unknown message: %s" % name
@@ -27,7 +27,6 @@
                except IndexError:
                        self.talker.supports = []
 
-
                self.switchState(LoginState)
 
        def default_msg(self, name, args):
@@ -37,7 +36,7 @@
 
        def msg_IDENT(self, args):
                name  = args[0]
-               lobby = self.factory.lobby
+               lobby = self.lobby
                        
                user = User(name,
                                version = self.talker.version,
@@ -50,14 +49,12 @@
                self.sendMsg('HELLO', name)
                self.switchState(NormalState)
 
-       
-
 class NormalState(State):
 
        def msg_TO(self, args):
                target, kind = args[0:2]
                msg = args[2:]
-               lobby = self.factory.lobby
+               lobby = self.lobby
                self.talker.user.updateIdle()
                user = lobby.lookup('user', target)
                user.sendMsg('FROM', self.talker.user.name, kind, *msg)
@@ -65,14 +62,14 @@
        def msg_IN(self, args):
                target, kind = args[0:2]
                msg = args[2:]
-               lobby = self.factory.lobby
+               lobby = self.lobby
                self.talker.user.updateIdle()
                group = lobby.lookup('group', target)
                group.sendMsg('IN', group.name, self.talker.user.name, kind, 
*msg)
 
        def msg_JOIN(self, args):
                name  = args[0]
-               lobby = self.factory.lobby
+               lobby = self.lobby
                user  = self.talker.user
                user.updateIdle()
                group  = lobby.lookup('group', name)
@@ -81,7 +78,7 @@
 
        def msg_PART(self, args):
                name  = args[0]
-               lobby = self.factory.lobby
+               lobby = self.lobby
                user  = self.talker.user
                user.updateIdle()
                group  = lobby.lookup('group', name)
@@ -92,7 +89,7 @@
 
        def msg_OPEN(self, args):
                name  = args[0]
-               lobby = self.factory.lobby
+               lobby = self.lobby
                user  = self.talker.user
                group  = Group(name, owner = user.name)
                
@@ -105,7 +102,7 @@
                        ns = 'group'
                
                self.talker.user.updateIdle()
-               entity = self.factory.lobby.lookup(ns, name)
+               entity = self.lobby.lookup(ns, name)
                infos  = entity.info
 
                self.sendMsg('INFO', ns, name, *infos)
@@ -120,24 +117,25 @@
                elif ns == 'group':
                        msg = 'You might want to try GROUPS' % name
                
-               group = self.factory.lobby.lookup('group', name)
-               self.talker.sendMsg('FROM', '&', 'say', msg)
+               group = self.lobby.lookup('group', name)
+               self.talker.sendMsg('FROM', '&root', 'say', msg)
                names = [ x.name for x in group.members(ns) ]
                self.talker.sendMsg('LIST', name, ns, *names)
 
        def msg_USERS(self, args):
-               name = args[0]
-               group = self.factory.lobby.lookup('group', name)
-               names = [ x.name for x in group.members('user') ]
-               self.talker.sendMsg('USERS', *names)
+               if args != []:
+                       name = args[0]
+                       group = self.lobby.lookup('group', name)
+                       names = [ x.name for x in group.members('user') ]
+                       self.talker.sendMsg('USERS', *names)
 
        def msg_GROUPS(self, args):
-               lobby = self.factory.lobby
+               lobby = self.lobby
                names = [ x.name for x in lobby.members('group') ]
                self.talker.sendMsg('GROUPS', *names)
 
        def msg_SERVICES(self, args):
-               lobby = self.factory.lobby
+               lobby = self.lobby
                names = [ x.name for x in lobby.members('service') ]
                self.talker.sendMsg('SERVICES', *names)
                

Modified: trunk/python/server/haver/server/talker.py
===================================================================
--- trunk/python/server/haver/server/talker.py  2006-05-22 02:45:37 UTC (rev 
981)
+++ trunk/python/server/haver/server/talker.py  2006-08-27 17:41:19 UTC (rev 
982)
@@ -1,38 +1,38 @@
 import re
 
 from twisted.python import log
-from twisted.protocols.basic import LineReceiver
+from twisted.protocols.basic import LineOnlyReceiver
 from twisted.internet.protocol import Factory
 from haver.server.errors import Fail, Bork
-from haver.server.states import *
+from haver.server.states import ConnectedState
 
-class HaverServerFactory(Factory):
+class HaverTalkerFactory(Factory):
 
        def __init__(self, lobby):
                self.lobby = lobby
 
        def buildProtocol(self, addr):
                p = self.protocol(addr)
-               p.factory = self
+               #p.factory = self
+               p.lobby   = self.lobby
                return p
                
-
-class HaverServer(LineReceiver):
+class HaverTalker(LineOnlyReceiver):
        def __init__(self, addr):
                self.addr = addr
                self.cmdpat = re.compile('^[A-Z][A-Z:_-]+$')
+               self.delimiter = "\n"
                
-       
        def lineReceived(self, line):
                try:
                        if len(line) == 0:
                                print "Got empty line"
                                raise Bork('Your line is empty')
                        
-                       msg = line.split("\t")
-                       name = msg[0]
+                       msg    = line.rstrip("\r").split("\t")
+                       name   = msg[0]
                        method = "msg_" + name
-                       state = self.state
+                       state  = self.state
 
                        if not self.cmdpat.match(name):
                                print "This is an example of a badly formed 
command: %s" % name
@@ -48,6 +48,7 @@
                except Fail, failure:
                        log.msg('Command %s failed with failure %s' % 
(self.cmd, failure.name))
                        self.sendMsg('FAIL', self.cmd, failure.name, 
*failure.args)
+
                except Bork, bork:
                        log.msg('Borking client: %s' % bork.msg)
                        if not isinstance(self.state, ConnectedState):
@@ -69,7 +70,6 @@
                name = user.name
                for group in user.quit(lobby):
                        group.sendMsg('QUIT', name, *args)
-
        
        def connectionMade(self):
                log.msg('New client from ' + str(self.addr))
@@ -92,4 +92,3 @@
                        log.msg('Failure after connection lost: %s (%s)' % 
(f.name, f.args))
 
                del self.state
-       

Modified: trunk/python/server/haver.tac
===================================================================
--- trunk/python/server/haver.tac       2006-05-22 02:45:37 UTC (rev 981)
+++ trunk/python/server/haver.tac       2006-08-27 17:41:19 UTC (rev 982)
@@ -1,21 +1,21 @@
 #!/usr/bin/python2.4
-from haver.server.talker import HaverServerFactory, HaverServer
+from haver.server.talker import HaverTalkerFactory, HaverTalker
 from haver.server.entity import Lobby, Group
 from twisted.application import service, internet
 from twisted.persisted   import sob
 
 application  = service.Application("haverd")
-service          = service.IService(application)
+service      = service.IService(application)
 #sc = service.IServiceCollection(application)
 #proc = service.IProcess(application)
 applicationper = sob.IPersistable(application)
 
 
 lobby   = Lobby()
-main = Group('main')
+main    = Group('main')
 lobby.add(main)
-factory = HaverServerFactory(lobby)
-factory.protocol = HaverServer
+factory = HaverTalkerFactory(lobby)
+factory.protocol = HaverTalker
 
 # Create the (sole) client
 # Normally, the echo protocol lives on port 7, but since that


_______________________________________________
Haver-commits mailing list
[email protected]
https://mail.gna.org/listinfo/haver-commits

Reply via email to