12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- """Utilities for working with Connections"""
- import win32com.server.util, pythoncom
- 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
|