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