123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- """Utilities for working with Connections"""
- import pythoncom
- import win32com.server.util
-
-
- class SimpleConnection:
- "A simple, single connection object"
-
- def __init__(self, coInstance=None, eventInstance=None, eventCLSID=None, debug=0):
- self.cp = None
- self.cookie = None
- self.debug = debug
- if not coInstance is None:
- self.Connect(coInstance, eventInstance, eventCLSID)
-
- def __del__(self):
- try:
- self.Disconnect()
- except pythoncom.error:
- # Ignore disconnection as we are torn down.
- pass
-
- def _wrap(self, obj):
- useDispatcher = None
- if self.debug:
- from win32com.server import dispatcher
-
- useDispatcher = dispatcher.DefaultDebugDispatcher
- return win32com.server.util.wrap(obj, useDispatcher=useDispatcher)
-
- def Connect(self, coInstance, eventInstance, eventCLSID=None):
- try:
- oleobj = coInstance._oleobj_
- except AttributeError:
- oleobj = coInstance
- cpc = oleobj.QueryInterface(pythoncom.IID_IConnectionPointContainer)
- if eventCLSID is None:
- eventCLSID = eventInstance.CLSID
- comEventInstance = self._wrap(eventInstance)
- self.cp = cpc.FindConnectionPoint(eventCLSID)
- self.cookie = self.cp.Advise(comEventInstance)
-
- def Disconnect(self):
- if not self.cp is None:
- if self.cookie:
- self.cp.Unadvise(self.cookie)
- self.cookie = None
- self.cp = None
|