def makeRunner(self):
        #do any on creation initialization here
        console.profuse("     Making Server Task Runner {0}\n".format(self.name))

        self.status = STOPPED #operational status of tasker
        self.desire = STOP #default what to do next time, override below
        self.done = True #default reset in restart

        try: #catch exceptions to close socket before exiting generator
            while (True):
                control = (yield (self.status )) #accept control and yield status
                console.profuse("\n     Iterate Server {0} with control = {1} status = {2}\n".format(
                    self.name,
                    ControlNames.get(control, 'Unknown'),
                    StatusNames.get(self.status, 'Unknown')))

                if control == RUN:
                    if self.status == STARTED or self.status == RUNNING:
                        console.profuse("     Running Server {0} ...\n".format(self.name))
                        input, sa = self.server.receive() #if no data the tuple is ('',None)

                        if sa:
                            shost, sport = sa

                        output = b''
                        result = self.server.send(output, self.dha)
                        self.status = RUNNING

                    else:
                        console.profuse("     Need to Start Server {0}\n".format(self.name))
                        self.desire = START

                elif control == READY:
                    console.profuse("     Readying Server {0} ...\n".format(self.name))

                    self.status = READIED
                    self.desire = START

                elif control == START:
                    console.terse("     Starting Server {0} ...\n".format(self.name))

                    if self.reopen(): #open socket server
                        self.desire = RUN
                        self.status = STARTED
                        self.done = False
                    else:
                        self.desire = STOP
                        self.status = STOPPED
                        self.done = True

                elif control == STOP:
                    if self.status == RUNNING or self.status == STARTED:
                        console.terse("     Stopping Server {0} ...\n".format(self.name))
                        self.close()
                        self.desire = STOP
                        self.status = STOPPED
                        self.done = True # only done if complete successfully
                    else:
                        console.terse("     Server {0} not started or running.\n".format(self.name))

                elif control == ABORT:
                    console.profuse("     Aborting Server {0} ...\n".format(self.name))
                    self.close()
                    self.desire = ABORT
                    self.status = ABORTED

                else: #control == unknown error condition bad control
                    self.desire = ABORT
                    self.status = ABORTED
                    console.profuse("     Aborting Server {0}, bad control = {1}\n".format(
                        self.name,  CommandNames[control]))

                    self.close()
                    break #break out of while loop. this will cause stopIteration

                self.stamp = self.store.stamp

        finally:
            console.profuse("     Exception causing Abort Server {0} ...\n".format(self.name))
            self.desire = ABORT
            self.status = ABORTED
            self.close()
generator factory function to create generator to run this monitor
dataset/ETHPy150Open ioflo/ioflo/ioflo/base/serving.py/Server.makeRunner