示例#1
0
def main():
    host = ''
    port = 7777
    server = None
    board = PyMata3(5)
    shoulder = Actuator(board, 9)
    arm = Actuator(board, 10)
    elbow = Actuator(board, 11, min_angle=-90, max_angle=90, offset=-90)

    global mech_arm
    mech_arm = MechanicalArm(
        [shoulder, arm, elbow],
        Fabrik(
            joint_positions=[Vector2(0, 0), Vector2(53, 0), Vector2(100, 0)],
            link_lengths=[53, 47],
            tolerance=0.1
        )
    )

    sleep(2)

    while server is None:
        try:
            server = TCPServer((host, port), ConnectionHandler)
        except OSError:
            port += 1
            continue
    print("Serving on: {}".format(port))
    server.serve_forever()
    server.server_close()
示例#2
0
 def server_close(self):
     """
     Closes the socket server and any associated resources.
     """
     self.log.debug("Closing the socket server connection.")
     TCPServer.server_close(self)
     self.queue_manager.close()
     self.topic_manager.close()
     if hasattr(self.authenticator, 'close'):
         self.authenticator.close()
     self.shutdown()
class HTTPServerThread(threading.Thread):
    def __init__(self):
        super().__init__()
        self.host = 'localhost'
        self.httpd = TCPServer((self.host, 0), HTTPRequestHandler)
        self.port = self.httpd.socket.getsockname()[1]
        self.url = 'http://%s:%d' % (self.host, self.port)

    def run(self):
        self.httpd.serve_forever()

    def shutdown(self):
        self.httpd.shutdown()
        self.httpd.server_close()
示例#4
0
def main(*args):
    """ Function invoked when the server is run as a script"""
    import argparse

    desc = "nframe server"
    parser = argparse.ArgumentParser(description=desc)
    parser.add_argument("-i", "--ip", default="0.0.0.0",
                        help="IP address of server")
    parser.add_argument("-p", "--port", default=7645,
                        help="Port of server")
    parser.add_argument("--import", action="store",
                        default=False, dest="import_file",
                        help="Import data before starting server")
    parser.add_argument("--export", action="store",
                        default=False, dest="export_file",
                        help="Export data then exits")
    parser.add_argument("--force-unlock", action="store_true", default=False,
                        help="Remove lock file without discretion",
                        dest="force_unlock")
    parser.add_argument("--exit", action="store_true", default=False,
                        help="perform action then exit (don't run server)",
                        dest="exit")

    pargs = parser.parse_args(args) if args else parser.parse_args()

    if pargs.force_unlock:
        Lock().force_release()

    if pargs.import_file:
        with Data(timeout=5) as import_data:
            import_data.import_data(pargs.import_file)

    if pargs.export_file:
        with Data(timeout=5) as export_data:
            export_data.export_data(pargs.export_file)
        return

    server = TCPServer((pargs.ip, pargs.port), Server)
    if pargs.exit:
        return pargs
    with Lock(timeout=5):
        try:
            server.serve_forever()
        except (SystemError, SystemExit, KeyboardInterrupt):
            server.server_close()
示例#5
0
                        file_size = os.path.getsize('/home/pi/motion/lastsnap.jpg')
                        print(file_size)
                        self.request.sendall(bytes(str(file_size), 'utf8'))
                        with open('/home/pi/motion/lastsnap.jpg', 'rb')as fin:
                            r = fin.read(block_size)
                            while r:
                                self.request.send(r)
                                r = fin.read(block_size)
                    elif oper:
                        my_car.exec_operation(int(oper))
                    else:
                        pass
            except TimeoutError:
                print("a client quited")
                break


if __name__ == '__main__':
    server = None
    my_car = None
    try:
        cf = read_config()
        my_car = Car(cf)
        cam = CamMotion(cf['cam_server_ip']['control_port'])
        cam.check()
        server = TCPServer(('', 8001), ResponseHandler)
        server.serve_forever()
    except KeyboardInterrupt:
        my_car.disconnect()
        server.server_close()
示例#6
0
 def server_close(self):
     TCPServer.server_close(self)
示例#7
0
class MyTCPHandler(SRH):
    def handle(self):
        addr_1 = ' ' + str(self.client_address[0])
        addr_2 = ' ' + str(self.client_address[1])

        print('Connected client:' + addr_1 + addr_2)

        self.data = self.rfile.readline().strip()
        if not self.data:
            print(addr_1 + ':' + addr_2 + ' - disconnected')

        self.wfile.write(self.data)


# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

if __name__ == "__main__":
    if len(sys.argv) < 3 or type(int(sys.argv[2])).__name__ != 'int':
        print('Usage: python ex_serv.py hostname port')
        sys.exit()
    else:
        ADDR = (sys.argv[1], int(sys.argv[2]))
        server = TCP(ADDR, MyTCPHandler)

        try:
            print('Waiting for connection...')
            server.serve_forever()
        except KeyboardInterrupt:
            print('\nServer stoped.')
            server.server_close()
示例#8
0
class BrowserRobot(object):
    ''' bring up a server with a custom robot
        
        Defaults
        ==========

        pause_time: time to wait between browser commands
        port: a random choice between 8000 and 9999
    '''
  
    def __init__(self, **kwargs):
        self.Handler = BrowserServer
        if "port" in kwargs:
            self.port = kwargs['port']
        else:       
            self.port = choice(range(8000,9999))
        print('Selected port is %s' %self.port)
        self.httpd = TCPServer(("", self.port), self.Handler)
        self.server = Thread(target=self.httpd.serve_forever)
        self.server.setDaemon(True)
        self.server.start()
        self.started = True
        self.pause_time = 100
        self.browser = None
        self.headless = False
        self.display = None
        self.driver = "Chrome"
        if "browser" in kwargs:
            self.driver = kwargs['browser']


    def get_and_wait(self, url, sleep_seconds=0):
        '''a helper function to get a browser and wait a randomly
           selected number of seconds between 0 and 2'''
        self.get_browser()
        wait_time = choice([0, 0.25, 0.5, 0.75, 1, 1.5, 2])
        self.browser.implicitly_wait(wait_time) # if error, will wait 3 seconds and retry
        self.browser.set_page_load_timeout(10)
        self.get_page(url)
        sleep(sleep_seconds)


    def get_browser(self, name=None):
        '''get_browser 
           return a browser if it hasn't been initialized yet
        '''
        if name is None:
            name=self.driver

        log_path = "%s-driver.log" % name.lower()

        if self.browser is None:
            options = self.get_options()
            if name.lower() == "Firefox":
                self.browser = webdriver.Firefox(service_log_path=log_path)
            else:
                self.browser = webdriver.Chrome(service_log_path=log_path,
                                                options=options)
        return self.browser


    def get_options(self, width=1200, height=800):
        '''return options for headless, no-sandbox, and custom width/height
        '''
        options = webdriver.ChromeOptions()
        options.add_argument("headless")
        options.add_argument("no-sandbox")
        options.add_argument("window-size=%sx%s" %(width, height))
        return options


    def get_page(self, url, name='Chrome'):
        '''get_page
            open a particular url, checking for Timeout
        '''
        if self.browser is None:
            self.browser = self.get_browser(name)

        try:
            return self.browser.get(url)
        except TimeoutException:
            print('Browser request timeout. Are you connected to the internet?')
            self.browser.close()
            sys.exit(1)


    def stop(self):
        '''close any running browser or server, and shut down the robot
        '''
        if self.browser is not None:
            self.browser.close()
        self.httpd.server_close() 

        if self.display is not None:
            self.display.close()


    def run_javascript(browser,code):
        if self.browser is not None:
            return browser.execute_script(code)
 def shutdown(self):
     TCPServer.shutdown(self)
     TCPServer.server_close(self)
     self.trd.join()
     del self.trd
示例#10
0
class BrowserRobot(object):
    ''' bring up a server with a custom robot
        
        Defaults
        ==========

        pause_time: time to wait between browser commands
        port: a random choice between 8000 and 9999
    '''
  
    def __init__(self, **kwargs):
        self.Handler = BrowserServer
        if "port" in kwargs:
            self.port = kwargs['port']
        else:       
            self.port = choice(range(8000,9999))
        print('Selected port is %s' %self.port)
        self.httpd = TCPServer(("", self.port), self.Handler)
        self.server = Thread(target=self.httpd.serve_forever)
        self.server.setDaemon(True)
        self.server.start()
        self.started = True
        self.pause_time = 100
        self.browser = None
        self.headless = False
        self.display = None
        self.driver = "Chrome"
        if "browser" in kwargs:
            self.driver = kwargs['browser']


    def validate(self, folder):
        '''validate is the first entrypoint function for running an experiment
           or survey robot. It ensures that the content is valid,
           and then calls _validate (should be defined in subclass)'''
            
        validator = ExperimentValidator()
        valid = validator.validate(folder)

        if valid is True:

            # IF missing favicon, add
            self._check_favicon(folder)

            valid = self._validate(folder)
            print("[done] stopping web server...")
            self.httpd.server_close()
        else:
            print('%s is not valid, skipping robot testing.' %folder)


    def check_errors(self):
   
        if self.browser is not None:
            # Look at log from last call
            log = self.browser.get_log("browser")
            for log_entry in log:
                assert_equal(log_entry["level"] in ["WARNING","INFO"],True)


    def get_and_wait(self, url, sleep_seconds=0):
        '''a helper function to get a browser and wait a randomly
           selected number of seconds between 0 and 2'''
        self.get_browser()
        wait_time = choice([0, 0.25, 0.5, 0.75, 1, 1.5, 2])
        self.browser.implicitly_wait(wait_time) # if error, will wait 3 seconds and retry
        self.browser.set_page_load_timeout(10)
        self.get_page(url)
        sleep(sleep_seconds)


    def get_browser(self, name=None):
        '''get_browser 
           return a browser if it hasn't been initialized yet
        '''
        if name is None:
            name=self.driver

        log_path = "%s-driver.log" % name.lower()

        if self.browser is None:
            options = self.get_options()
            if name.lower() == "Firefox":
                self.browser = webdriver.Firefox(service_log_path=log_path)
            else:
                self.browser = webdriver.Chrome(service_log_path=log_path,
                                                options=options)
        return self.browser


    def get_options(self, width=1200, height=800):
        '''return options for headless, no-sandbox, and custom width/height
        '''
        options = webdriver.ChromeOptions()
        options.add_argument("headless")
        options.add_argument("no-sandbox")
        options.add_argument("window-size=%sx%s" %(width, height))
        return options


    def get_page(self, url, name='Chrome'):
        '''get_page
            open a particular url, checking for Timeout
        '''
        if self.browser is None:
            self.browser = self.get_browser(name)

        try:
            return self.browser.get(url)
        except TimeoutException:
            print('Browser request timeout. Are you connected to the internet?')
            self.browser.close()
            sys.exit(1)


    def stop(self):
        '''close any running browser or server, and shut down the robot
        '''
        if self.browser is not None:
            self.browser.close()
        self.httpd.server_close() 

        if self.display is not None:
            self.display.close()


    def run_javascript(browser,code):
        if self.browser is not None:
            return browser.execute_script(code)
示例#11
0
			content = json.dumps(data).encode("utf-8")

		return content.strip()

	def do_HEAD(self):
		self._headers()

	def do_GET(self):
		self._headers()
		self.wfile.write(self._content())

	def do_POST(self):
		length = int(self.headers.get("Content-Length"))
		data = self.rfile.read(length)
		self._headers()
		self.wfile.write(self._content(data.decode("utf-8")).encode("utf-8"))

if __name__ == "__main__":
	HOST, PORT = "localhost", 8001

	try:
		httpd = TCPServer((HOST, PORT), RequestHandler)

		print("Serving HTTP at port", PORT)
		httpd.serve_forever()
	except KeyboardInterrupt:
		print("Shutting down HTTP server")
		httpd.shutdown()
		httpd.server_close()
		print()
示例#12
0
class PannellumTester(object):
    """Bring up a server with a testing robot.
    """
    def __init__(self, port=None, browser="Chrome", headless=False):
        self.handler = PannellumServer
        if port:
            self.port = port
        else:
            self.port = choice(range(8000, 9999))
        print("Selected port is %s" % self.port)
        self.httpd = TCPServer(("", self.port), self.handler)
        self.server = Thread(target=self.httpd.serve_forever)
        self.server.setDaemon(True)
        self.server.start()
        self.started = True
        self.pause_time = 100
        self.browser = None
        self.headless = headless
        self.display = None
        self.driver = browser

    def take_screenshot(self, element_id, filename=None):
        """Take a screenshot of an element with a given ID.
        """
        element = self.browser.find_element(By.ID, element_id)
        img = Image.open(io.BytesIO(element.screenshot_as_png)).convert("RGB")
        if filename is not None:
            img.save(filename)
        return img

    def equal_images(self, reference, comparator, name, threshold=5):
        """Compare two images, both loaded with PIL, based on pixel differences."""
        diff = np.mean(np.array(ImageChops.difference(reference, comparator)))
        print("%s difference: %s" % (name, diff))
        if diff >= threshold:
            comparator.save("tests/" + name + "-comparison.png")
            raise ValueError("Screenshot difference is above threshold!")

    def run_tests(self, create_ref=False):
        """Run tests for Pannellum."""

        print("Loading page...")
        self.get_page("http://localhost:%s/tests/tests.html" % self.port)

        print("Running tests...")
        time.sleep(5)

        assert self.browser.execute_script("return viewer.isLoaded()") is True

        # Check equirectangular
        assert self.browser.execute_script(
            "return viewer.getScene() == 'equirectangular'")
        if create_ref:
            self.take_screenshot("panorama", "tests/equirectangular.png")
            subprocess.call([
                "optipng", "-o7", "-strip", "all", "tests/equirectangular.png"
            ])
        else:
            reference = Image.open("tests/equirectangular.png")
            comparator = self.take_screenshot("panorama")
            self.equal_images(reference, comparator, "equirectangular")
        print("PASS: equirectangular")

        # Check movement
        self.browser.execute_script(
            "viewer.setPitch(30).setYaw(-20).setHfov(90)")
        time.sleep(2)
        assert self.browser.execute_script(
            "return viewer.getPitch() == 30 && viewer.getYaw() == -20 && viewer.getHfov() == 90"
        )
        self.browser.find_element(By.CLASS_NAME, "pnlm-zoom-in").click()
        time.sleep(1)
        assert self.browser.execute_script("return viewer.getHfov() == 85")
        self.browser.find_element(By.CLASS_NAME, "pnlm-zoom-out").click()
        time.sleep(1)
        assert self.browser.execute_script("return viewer.getHfov() == 90")
        print("PASS: movement")

        # Check look at
        self.browser.execute_script("viewer.lookAt(-10, 90, 100)")
        time.sleep(2)
        assert self.browser.execute_script(
            "return viewer.getPitch() == -10 && viewer.getYaw() == 90 && viewer.getHfov() == 100"
        )
        print("PASS: look at")

        # Check cube
        self.browser.execute_script("viewer.loadScene('cube')")
        time.sleep(5)
        assert self.browser.execute_script(
            "return viewer.getScene() == 'cube'")
        if create_ref:
            self.take_screenshot("panorama", "tests/cube.png")
            subprocess.call(
                ["optipng", "-o7", "-strip", "all", "tests/cube.png"])
        else:
            reference = Image.open("tests/cube.png")
            comparator = self.take_screenshot("panorama")
            self.equal_images(reference, comparator, "cube")

        # Check to make sure hotspots are below controls
        self.browser.execute_script("viewer.setPitch(-35)")
        self.browser.execute_script("viewer.setYaw(32)")
        time.sleep(2)
        action = ActionChains(self.browser)
        elem = self.browser.find_element(By.CLASS_NAME, "pnlm-zoom-in")
        action.move_to_element(elem).move_by_offset(1, 1).click().perform()
        assert self.browser.execute_script("return viewer.getHfov() == 95")
        print("PASS: hot spots below UI")

        # Check hot spot
        self.browser.find_element(By.CLASS_NAME, "pnlm-scene").click()
        time.sleep(5)
        assert self.browser.execute_script(
            "return viewer.getScene() == 'multires'")
        print("PASS: hot spot")

        # Check multires
        if create_ref:
            self.take_screenshot("panorama", "tests/multires.png")
            subprocess.call(
                ["optipng", "-o7", "-strip", "all", "tests/multires.png"])
        else:
            reference = Image.open("tests/multires.png")
            comparator = self.take_screenshot("panorama")
            self.equal_images(reference, comparator, "multires")

        # Check hotspot dragging - move from (20, 20) to (0, 0)
        action = ActionChains(self.browser)
        action.drag_and_drop(
            self.browser.find_element(By.CLASS_NAME, "pnlm-hotspot"),
            self.browser.find_element(
                By.CLASS_NAME,
                "pnlm-render-container"),  # drops in the middle of the element
        )
        action.perform()
        time.sleep(1)
        assert self.browser.execute_script(
            "var hs = viewer.getConfig().hotSpots[0]; return Math.abs(hs.yaw) < 0.001 && Math.abs(hs.pitch) < 0.001"
        )
        print("PASS: hot spot dragging")

        self.httpd.server_close()

    def get_browser(self, name=None):
        """Return a browser if it hasn't been initialized yet.
        """
        if name is None:
            name = self.driver

        log_path = "tests/%s-driver.log" % name.lower()

        if self.browser is None:
            if name.lower() == "firefox":
                fp = webdriver.FirefoxProfile()
                fp.set_preference("layout.css.devPixelsPerPx", "1.0")
                self.browser = webdriver.Firefox(service_log_path=log_path,
                                                 firefox_profile=fp)
                self.browser.set_window_size(800, 600)
            else:
                options = webdriver.ChromeOptions()
                options.add_argument("headless")
                options.add_argument("no-sandbox")
                options.add_argument("window-size=800x600")
                self.browser = webdriver.Chrome(service_log_path=log_path,
                                                options=options)
        return self.browser

    def get_page(self, url):
        """Open a particular URL, checking for timeout.
        """
        if self.browser is None:
            self.browser = self.get_browser()

        try:
            return self.browser.get(url)
        except TimeoutException:
            print(
                "Browser request timeout. Are you connected to the internet?")
            self.browser.close()
            sys.exit(1)

    def stop(self):
        """Close any running browser or server and shut down the robot.
        """
        if self.browser is not None:
            self.browser.close()
        self.httpd.server_close()

        if self.display is not None:
            self.display.close()
示例#13
0
class ExpfactoryRobot(object):
    ''' bring up a server with a custom robot
        
        Defaults
        ==========

        pause_time: time to wait between browser commands
        port: a random choice between 8000 and 9999
    '''
  
    def __init__(self, **kwargs):
        self.Handler = ExpfactoryServer
        if "port" in kwargs:
            self.port = kwargs['port']
        else:       
            self.port = choice(range(8000,9999))
        bot.debug('Selected port is %s' %self.port)
        self.httpd = TCPServer(("", self.port), self.Handler)
        self.server = Thread(target=self.httpd.serve_forever)
        self.server.setDaemon(True)
        self.server.start()
        self.started = True
        self.pause_time = 100
        self.browser = None
        self.headless = False
        self.display = None
        self.driver = "Chrome"
        if "browser" in kwargs:
            self.driver = kwargs['browser']


    def validate(self, folder):
        '''validate is the first entrypoint function for running an experiment
           or survey robot. It ensures that the content is valid,
           and then calls _validate (should be defined in subclass)'''
            
        validator = ExperimentValidator()
        valid = validator.validate(folder)

        if valid is True:

            # IF missing favicon, add
            self._check_favicon(folder)

            valid = self._validate(folder)
            bot.log("[done] stopping web server...")
            self.httpd.server_close()
        else:
            bot.warning('%s is not valid, skipping robot testing.' %folder)


    def _validate(self, folder=None):
        '''_validate is required to be implemented in the subclass
        '''
        raise NotImplementedError


    def _check_favicon(self, folder):
        '''add the expfactory favicon if the user doesn't already have one.
        '''
        here = "%s/favicon.ico" %os.path.abspath(os.path.dirname(__file__))
        there = '%s/favicon.ico' %folder
        if not os.path.exists(there):
            shutil.copyfile(here, there)

    def check_errors(self):
   
        if self.browser is not None:
            # Look at log from last call
            log = self.browser.get_log("browser")
            for log_entry in log:
                assert_equal(log_entry["level"] in ["WARNING","INFO"],True)


    def get_browser(self,name=None):
        '''get_browser 
           return a browser if it hasn't been initialized yet
        '''
        if name is None:
            name=self.driver

        service_log_path = "%s-driver.log" %name.lower()
        if self.browser is None:
            if name.lower() == "Firefox":
                self.browser = webdriver.Firefox(service_log_path=service_log_path)
            else:
                self.browser = webdriver.Chrome(service_log_path=service_log_path)
        return self.browser

    
    def get_page(self, url, name='Chrome'):
        '''get_page
            open a particular url, checking for Timeout
        '''
        if self.browser is None:
            self.browser = self.get_browser(name)

        try:
            return self.browser.get(url)
        except TimeoutException:
            bot.error('Browser request timeout. Are you connected to the internet?')
            self.browser.close()
            sys.exit(1)

    def stop(self):
        '''close any running browser or server, and shut down the robot
        '''
        if self.browser is not None:
            self.browser.close()
        self.httpd.server_close() 

        if self.display is not None:
            self.display.close()

    # Run javascript and get output
    def run_javascript(browser,code):
        if self.browser is not None:
            return browser.execute_script(code)
示例#14
0
 def shutdown(self):
     TCPServer.shutdown(self)
     TCPServer.server_close(self)
     self.trd.join()
     del self.trd
示例#15
0
文件: server.py 项目: shred/pyquaero
 def server_close(self):
     if self.time_updater:
         self.time_updater.stop()
     TCPServer.server_close(self)
     self.aquaero.close()
示例#16
0
        account = parse_qs(parsedResult.query)['account']
        try:
            with open(fileToDownload) as file:
                invitation = load(file)
                link = invitation['link-invitation']
                logger.info(
                    'New link invitation for account {}'.format(account))
                logger.info('Generated nonce {}'.format(link['nonce']))
                logger.info('Signed invitation with signature {}'.format(
                    invitation['sig']))
                logger.info('Invitation downloaded successful')
        except IOError as ex:
            logger.info('IOError occurred {}'.format(ex))
        return super().do_GET()


# There is some issue with enclosing below statement inside `with`
httpd = TCPServer(('', PORT), BulldogServer)
print('serving at port', PORT)
try:
    httpd.serve_forever()
except KeyboardInterrupt:
    httpd.server_close()
    print('Goodbye! Stopped bulldog server.')

# sample command to run
# $ python -m bulldogServer.py
# switch to another directory where we need to download invitation file
# if we fire wget command in same sample directory, then we would have
# two invitations with name as -1 or -2 appended