Author: dylan
Date: 2006-08-27 14:47:57 -0400 (Sun, 27 Aug 2006)
New Revision: 983
Modified:
trunk/
trunk/python/server/.todo
trunk/python/server/TODO
trunk/python/server/haver/server/states.py
trunk/python/server/haver/server/talker.py
Log:
Fixed a number of state related bugs. This whole thing reeks, though.
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:3441
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:3443
e9404bb1-7af0-0310-a7ff-e22194cd388b:/haver/local:2455
edfcd8bd-4ce7-0310-a97e-bb1efd40edf3:/local:238
Modified: trunk/python/server/.todo
===================================================================
--- trunk/python/server/.todo 2006-08-27 17:41:19 UTC (rev 982)
+++ trunk/python/server/.todo 2006-08-27 18:47:57 UTC (rev 983)
@@ -5,6 +5,9 @@
<note priority="veryhigh" time="1156689825">
Add support for authentication
</note>
+ <note priority="veryhigh" time="1156704505">
+ There's so many layers of crap in this, it's impossible to figure out.
+ </note>
<note priority="low" time="1151301454">
Add a command to list groups a user belongs to.
</note>
Modified: trunk/python/server/TODO
===================================================================
--- trunk/python/server/TODO 2006-08-27 17:41:19 UTC (rev 982)
+++ trunk/python/server/TODO 2006-08-27 18:47:57 UTC (rev 983)
@@ -1,12 +1,10 @@
-- Bug: when a client connection crashes (raises an exception), make sure to
remove a user from all joined channels...
- (added Sun May 21 22:10:02 2006, completed on Sun May 21 22:44:18 2006,
priority high)
-- Bug: PART main shows unknown.user main...
- (added Sun May 21 22:10:53 2006, completed on Sun May 21 22:44:32 2006,
priority high)
+haverd-python- Add support for authentication
+ (added Sun Aug 27 10:43:45 2006, incomplete, priority veryhigh)
+- There's so many layers of crap in this, it's impossible to figure out.
+ (added Sun Aug 27 14:48:25 2006, incomplete, priority veryhigh)
+
- Add a command to list groups a user belongs to.
- (added Sun May 21 22:06:52 2006, incomplete, priority medium)
+ (added Mon Jun 26 01:57:34 2006, incomplete, priority low)
-- BUG: 'USERS' without an argument shouldn't crash the client connection.
- (added Sun May 21 22:44:00 2006, incomplete, priority medium)
-
Modified: trunk/python/server/haver/server/states.py
===================================================================
--- trunk/python/server/haver/server/states.py 2006-08-27 17:41:19 UTC (rev
982)
+++ trunk/python/server/haver/server/states.py 2006-08-27 18:47:57 UTC (rev
983)
@@ -1,3 +1,4 @@
+from twisted.python import log
from haver.server.entity import User, Group
from haver.server.errors import Fail, Bork
@@ -7,6 +8,11 @@
self.lobby = talker.lobby
self.talker.state = self
+ def quit(self, reason, detail = "", send_bye = True):
+ log.msg('Processing quit')
+ self.talker.transport.loseConnection()
+ self.switchState(DisconnectedState)
+
def sendMsg(self, *args):
self.talker.sendMsg(*args)
@@ -32,6 +38,17 @@
def default_msg(self, name, args):
self.talker.transport.loseConnection()
+class DisconnectedState(State):
+
+ def quit(self, *args, **kwargs):
+ if hasattr(self.talker, 'user'):
+ log.msg("Quit: Removing user from lobby and state")
+ self.lobby.remove(self.talker.user.namespace,
self.talker.user.name)
+ del self.talker.user
+ else:
+ log.msg('Quit: Nothing to do')
+
+
class LoginState(State):
def msg_IDENT(self, args):
@@ -49,8 +66,28 @@
self.sendMsg('HELLO', name)
self.switchState(NormalState)
+ def default_msg(self, name, args):
+ raise Bork("Get out of my pants!")
+
class NormalState(State):
+ def quit(self, reason, detail = "", send_bye = True):
+ log.msg("Client quits, reason = %s" % reason)
+ user = self.talker.user
+ lobby = self.lobby
+ if detail is None:
+ args = [reason]
+ else:
+ args = [reason, detail]
+
+ if send_bye:
+ self.sendMsg('BYE', *args)
+ name = user.name
+ for group in user.quit(lobby):
+ group.sendMsg('QUIT', name, *args)
+
+ return State.quit(self, reason, detail, send_bye)
+
def msg_TO(self, args):
target, kind = args[0:2]
msg = args[2:]
@@ -146,5 +183,4 @@
if args: detail = args[0]
else: detail = None
- self.talker.quit('bye', detail)
-
+ self.quit('bye', detail)
Modified: trunk/python/server/haver/server/talker.py
===================================================================
--- trunk/python/server/haver/server/talker.py 2006-08-27 17:41:19 UTC (rev
982)
+++ trunk/python/server/haver/server/talker.py 2006-08-27 18:47:57 UTC (rev
983)
@@ -3,7 +3,7 @@
from twisted.python import log
from twisted.protocols.basic import LineOnlyReceiver
from twisted.internet.protocol import Factory
-from haver.server.errors import Fail, Bork
+from haver.server.errors import Fail, Bork
from haver.server.states import ConnectedState
class HaverTalkerFactory(Factory):
@@ -53,23 +53,12 @@
log.msg('Borking client: %s' % bork.msg)
if not isinstance(self.state, ConnectedState):
self.sendMsg('BORK', bork.msg)
- self.transport.loseConnection()
+ self.state.quit('bork', bork.msg, send_bye = False)
+
def sendMsg(self, *msg):
self.sendLine("\t".join(msg))
- def quit(self, reason, detail = None):
- log.msg("Client quits, reason = %s" % reason)
- user = self.user
- if detail is None:
- args = [reason]
- else:
- args = [reason, detail]
-
- self.sendMsg('BYE', *args)
- 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))
@@ -77,18 +66,12 @@
def connectionLost(self, reason):
log.msg('Lost client from ' + str(self.addr))
+ log.msg("State is: " + str(self.state))
try:
- user = self.user
- lobby = self.factory.lobby
- lobby.remove(user.namespace, user.name)
- for group in user.quit(lobby):
- group.sendMsg('QUIT', user.name, 'disconnect')
-
- del self.user
- except AttributeError:
- pass
+ self.state.quit('disconnect')
except Fail, f:
log.msg('Failure after connection lost: %s (%s)' %
(f.name, f.args))
+ log.msg('Removing state')
del self.state
_______________________________________________
Haver-commits mailing list
[email protected]
https://mail.gna.org/listinfo/haver-commits