import pythoncom
import win32com.server.connect
# event ID-je
IID_IIntVolt = pythoncom.MakeIID("{9DF3E4B3-48DD-11D4-8CF7-005004E9490B}")
class cechoevt(win32com.server.connect.ConnectableServer):
"""
Ez az echo class. Egyetlen funkciója az echo metódus, ami annyiszor
visszhangozza a kapott paramétert, amennyi count értéke.
cecho class-t módosítottam úgy, hogy IntVolt eseményt generáljon az echo metódus.
Természetesen minden ID is változott, hiszen ez már egy másik class.
"""
#regisztációs információk
_public_methods_ = ['echo'] + win32com.server.connect.ConnectableServer._public_methods_
_public_attrs_ = ['count']
_connect_interfaces_ = [IID_IIntVolt]
_reg_desc_ = 'Echo class IntVolt eseménnyel'
_reg_clsid_ = '{9DF3E4B2-48DD-11D4-8CF7-005004E9490B}'
_reg_progid_ = 'mechoevt.cechoevt'
def __init__(self):
win32com.server.connect.ConnectableServer.__init__(self)
self.count=1 #default: az ismétlések száma 1
def echo(self,arg):
#előbb megnézzük, hogy int-e a paraméter
#ha igen, akkor eseményt generálunk
if type(arg)==type(1):
#sinkek hívása
#2. paraméterben lehet az eseménykezelőnek adatot átadni
self._BroadcastNotify(self.NotifyIntVolt, (arg,) )
return map(lambda x,y=arg: y, range(self.count))
def NotifyIntVolt(self, interface, arg):
#interface a kliens oldali sink IDispatch interfésze
#IDispatch interfész Invoke metóduse dispid-vel hivatkozik az interfész metódusaira
#arg-ban most az int értéke van, amit echo kapott
interface.Invoke(interface.GetIDsOfNames("IntVolt"), 0, pythoncom.DISPATCH_METHOD, 0,arg)
def Register():
"""
Ez a legegyszerűbb regisztrációs módszer Python-ban.
"""
from win32com.server.register import UseCommandLine
return UseCommandLine(cechoevt)
if __name__=='__main__':
Register()