Source code for Unitator.unitator

#!/usr/bin/python
import socket
import json
import subprocess
from time import sleep
import database
import clipping

from pyvirtualdisplay import Display
from selenium import webdriver

TCP_PORT = 1337
TCP_IP = '0.0.0.0'


[docs]def recv_data(conn): """Receive all data from a socket *conn* """ data = "" while True: new_data = conn.recv(1) if not new_data: break data += new_data.decode() return data
[docs]def send(data, host, port): """Sends *data* using a gopher connnection on *host*:*port* """ gopher_conn = socket.create_connection((host, port)) gopher_conn.send(data) return gopher_conn
[docs]def unit(segments, job_id): """Clip *segments* of the job *job_id* into a unit square and forwards them """ print("segments:", segments) segments = [clipping.segment( clipping.p(segment[0][0], segment[0][1]), clipping.p(segment[1][0], segment[1][1]) ) for segment in segments] print("segments1:", segments) clipped_segments = clipping.clip_unit_square(segments) database.update_state(database.open_db(), 10, job_id) print("clipped_segments:", clipped_segments) tuple_segments = [( (segment.a.x, segment.a.y), (segment.b.x, segment.b.y) ) for segment in clipped_segments] print("tuple_segments:", tuple_segments) write(job_id, json.dumps(tuple_segments, indent=4))
[docs]def write(job_id, text): """Writes a *text* by an html form """ print(text) database.update_state(database.open_db(), 11, job_id) display = Display(visible=0, size=(1024, 768)) display.start() browser = webdriver.Firefox() actions = webdriver.ActionChains(browser) browser.get("file:///app/test.html") message = browser.find_element_by_name("message") message.send_keys(text) job = browser.find_element_by_name("job") job.send_keys(job_id) job.submit() database.update_state(database.open_db(), 12, job_id)
[docs]def listen(): """Start a Unitator server listening for notifications of a golfer server """ notifier = socket.socket(socket.AF_INET, socket.SOCK_STREAM) notifier.bind((TCP_IP, TCP_PORT)) notifier.listen() print('listening') while True: conn, _ = notifier.accept() print('accepted') data = conn.recv(19) if data == b'pssssst want some ?': data = b"" while True: new_data = conn.recv(1) if not new_data or new_data == b'#': break data += new_data conn.close() data = data.decode() data = data.split('|') if len(data) == 2: host, ip = data[0].split(":") job_selector = data[1] print('>', host, ip, job_selector) job_conn = send(job_selector.encode()+b'\n', host, ip) raw = recv_data(job_conn) segments = json.loads(raw) print(raw, segments) send(b'!/delete '+job_selector.encode()+b'\n', host, ip) job_id = job_selector.split("/")[1] database.update_state(database.open_db(), 9, job_id) unit(segments, job_id)
if __name__ == "__main__": print('starting') listen()