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

Reply via email to