def run(self): numClient = 0 while True: pipe = self.create_pipe() if pipe == INVALID_HANDLE_VALUE: return False print("pipe created, wait for client") # Wait for the client to connect; if it succeeds, the function returns a nonzero value. # If the function returns zero, GetLastError returns ERROR_PIPE_CONNECTED. # According to Windows API doc, ConnectNamedPipe() returns non-zero on success. # However, the doc of pywin32 stated that it should return zero instead. :-( connected = (ConnectNamedPipe(pipe, None) == 0) if not connected: connected = (GetLastError() == ERROR_PIPE_CONNECTED) # client connected if connected and numClient < IMServiceMgr.getNumOfServices(): print("client connected") # create a Client instance for the client client = Client(self, pipe) self.lock.acquire() self.clients.append(client) numClient += 1 self.lock.release() # run a separate thread for this client thread = ClientThread(client) thread.start() return True
def __init__(self, server, pipe): self.pipe= pipe self.server = server # FIXME: allow different types of services here self.service = IMServiceMgr.pickOneServiceAndMarkHooked(self)