--- /dev/null
+# -*- coding: utf-8 -*-
+#######################################################################################
+# Plinn - http://plinn.org #
+# Copyright (C) 2005-2009 Benoît PIN <benoit.pin@ensmp.fr> #
+# #
+# This program is free software; you can redistribute it and/or #
+# modify it under the terms of the GNU General Public License #
+# as published by the Free Software Foundation; either version 2 #
+# of the License, or (at your option) any later version. #
+# #
+# This program is distributed in the hope that it will be useful, #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+# GNU General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this program; if not, write to the Free Software #
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #
+#######################################################################################
+""" provides utilities to raise / handle zope server shutdown events
+
+
+
+"""
+
+import asyncore
+from zope.event import notify
+from zope.component import getSiteManager
+from events import ZopeShutdownEvent
+from OFS.interfaces import IApplication
+
+class ZopeShutdownDispatcher(asyncore.dispatcher):
+
+
+ def __init__(self, app, map=None):
+ asyncore.dispatcher.__init__(self, None, map)
+ self.connected = False
+ self.app = self._fileno = app
+ self.add_channel()
+
+ def close(self) :
+ self.del_channel()
+
+ def readable(self):
+ return False
+
+ def handle_read(self):
+ return True
+
+ def writable(self):
+ return False
+
+ def handle_write (self):
+ return True
+
+ def clean_shutdown_control(self, phase, time):
+ asyncore.dispatcher.log_info(self, 'zope shutdown event raised at phase: %s' % phase, 'info')
+ e = ZopeShutdownEvent(self.app, phase, time)
+ notify(e)
+ return e.veto