From 7cc23bdabe132f60853ca82512792149e453fdbd Mon Sep 17 00:00:00 2001 From: Andrew Gundersen Date: Mon, 18 Jan 2021 11:43:30 -0600 Subject: [PATCH] python server --- .../audio/include/audio_handler.h | 0 {crimata => app}/audio/include/frame_buffer.h | 0 {crimata => app}/audio/src/audio_handler.c | 0 {crimata => app}/audio/src/frame_buffer.c | 0 {crimata => app}/core/Info.plist | 0 .../apps/Crimata.app/Contents/Info.plist | 0 .../apps/Crimata.app/Contents/MacOS/Crimata | Bin .../Crimata.app/Contents/Resources/ICON.icns | Bin .../core/build/objects/src/main.o | Bin {crimata => app}/core/include/main.h | 0 {crimata => app}/core/makefile | 0 {crimata => app}/core/resources/ICON.icns | Bin {crimata => app}/core/src/main.c | 0 {crimata => app}/gui/include/anims.h | 0 {crimata => app}/gui/include/eases.h | 0 {crimata => app}/gui/include/gtk-cairo_api.h | 0 {crimata => app}/gui/src/anims.c | 0 {crimata => app}/gui/src/bounce_anim.c | 0 {crimata => app}/gui/src/eases.c | 0 {crimata => app}/gui/src/gtk-cairo_api.c | 0 {crimata => app}/gui/src/print_anim.c | 0 {crimata => app}/gui/src/recording_anim.c | 0 {crimata => app}/gui/src/standby_anim.c | 0 {crimata => app}/gui/src/start_up_anim.c | 0 {crimata => app}/gui/src/window 2.css | 0 {crimata => app}/gui/src/window 2.ui | 0 {crimata => app}/gui/src/window.css | 0 {crimata => app}/gui/src/window.ui | 0 .../networking/include/package_handler 2.h | 0 .../networking/include/package_handler.h | 0 .../networking/src/package_handler 2.c | 0 .../networking/src/package_handler.c | 0 server/packages.py | 57 ++++++++++++++++++ server/server.py | 50 +++++++++++++++ 34 files changed, 107 insertions(+) rename {crimata => app}/audio/include/audio_handler.h (100%) rename {crimata => app}/audio/include/frame_buffer.h (100%) rename {crimata => app}/audio/src/audio_handler.c (100%) rename {crimata => app}/audio/src/frame_buffer.c (100%) rename {crimata => app}/core/Info.plist (100%) rename {crimata => app}/core/build/apps/Crimata.app/Contents/Info.plist (100%) rename {crimata => app}/core/build/apps/Crimata.app/Contents/MacOS/Crimata (100%) rename {crimata => app}/core/build/apps/Crimata.app/Contents/Resources/ICON.icns (100%) rename {crimata => app}/core/build/objects/src/main.o (100%) rename {crimata => app}/core/include/main.h (100%) rename {crimata => app}/core/makefile (100%) rename {crimata => app}/core/resources/ICON.icns (100%) rename {crimata => app}/core/src/main.c (100%) rename {crimata => app}/gui/include/anims.h (100%) rename {crimata => app}/gui/include/eases.h (100%) rename {crimata => app}/gui/include/gtk-cairo_api.h (100%) rename {crimata => app}/gui/src/anims.c (100%) rename {crimata => app}/gui/src/bounce_anim.c (100%) rename {crimata => app}/gui/src/eases.c (100%) rename {crimata => app}/gui/src/gtk-cairo_api.c (100%) rename {crimata => app}/gui/src/print_anim.c (100%) rename {crimata => app}/gui/src/recording_anim.c (100%) rename {crimata => app}/gui/src/standby_anim.c (100%) rename {crimata => app}/gui/src/start_up_anim.c (100%) rename {crimata => app}/gui/src/window 2.css (100%) rename {crimata => app}/gui/src/window 2.ui (100%) rename {crimata => app}/gui/src/window.css (100%) rename {crimata => app}/gui/src/window.ui (100%) rename {crimata => app}/networking/include/package_handler 2.h (100%) rename {crimata => app}/networking/include/package_handler.h (100%) rename {crimata => app}/networking/src/package_handler 2.c (100%) rename {crimata => app}/networking/src/package_handler.c (100%) create mode 100644 server/packages.py create mode 100644 server/server.py diff --git a/crimata/audio/include/audio_handler.h b/app/audio/include/audio_handler.h similarity index 100% rename from crimata/audio/include/audio_handler.h rename to app/audio/include/audio_handler.h diff --git a/crimata/audio/include/frame_buffer.h b/app/audio/include/frame_buffer.h similarity index 100% rename from crimata/audio/include/frame_buffer.h rename to app/audio/include/frame_buffer.h diff --git a/crimata/audio/src/audio_handler.c b/app/audio/src/audio_handler.c similarity index 100% rename from crimata/audio/src/audio_handler.c rename to app/audio/src/audio_handler.c diff --git a/crimata/audio/src/frame_buffer.c b/app/audio/src/frame_buffer.c similarity index 100% rename from crimata/audio/src/frame_buffer.c rename to app/audio/src/frame_buffer.c diff --git a/crimata/core/Info.plist b/app/core/Info.plist similarity index 100% rename from crimata/core/Info.plist rename to app/core/Info.plist diff --git a/crimata/core/build/apps/Crimata.app/Contents/Info.plist b/app/core/build/apps/Crimata.app/Contents/Info.plist similarity index 100% rename from crimata/core/build/apps/Crimata.app/Contents/Info.plist rename to app/core/build/apps/Crimata.app/Contents/Info.plist diff --git a/crimata/core/build/apps/Crimata.app/Contents/MacOS/Crimata b/app/core/build/apps/Crimata.app/Contents/MacOS/Crimata similarity index 100% rename from crimata/core/build/apps/Crimata.app/Contents/MacOS/Crimata rename to app/core/build/apps/Crimata.app/Contents/MacOS/Crimata diff --git a/crimata/core/build/apps/Crimata.app/Contents/Resources/ICON.icns b/app/core/build/apps/Crimata.app/Contents/Resources/ICON.icns similarity index 100% rename from crimata/core/build/apps/Crimata.app/Contents/Resources/ICON.icns rename to app/core/build/apps/Crimata.app/Contents/Resources/ICON.icns diff --git a/crimata/core/build/objects/src/main.o b/app/core/build/objects/src/main.o similarity index 100% rename from crimata/core/build/objects/src/main.o rename to app/core/build/objects/src/main.o diff --git a/crimata/core/include/main.h b/app/core/include/main.h similarity index 100% rename from crimata/core/include/main.h rename to app/core/include/main.h diff --git a/crimata/core/makefile b/app/core/makefile similarity index 100% rename from crimata/core/makefile rename to app/core/makefile diff --git a/crimata/core/resources/ICON.icns b/app/core/resources/ICON.icns similarity index 100% rename from crimata/core/resources/ICON.icns rename to app/core/resources/ICON.icns diff --git a/crimata/core/src/main.c b/app/core/src/main.c similarity index 100% rename from crimata/core/src/main.c rename to app/core/src/main.c diff --git a/crimata/gui/include/anims.h b/app/gui/include/anims.h similarity index 100% rename from crimata/gui/include/anims.h rename to app/gui/include/anims.h diff --git a/crimata/gui/include/eases.h b/app/gui/include/eases.h similarity index 100% rename from crimata/gui/include/eases.h rename to app/gui/include/eases.h diff --git a/crimata/gui/include/gtk-cairo_api.h b/app/gui/include/gtk-cairo_api.h similarity index 100% rename from crimata/gui/include/gtk-cairo_api.h rename to app/gui/include/gtk-cairo_api.h diff --git a/crimata/gui/src/anims.c b/app/gui/src/anims.c similarity index 100% rename from crimata/gui/src/anims.c rename to app/gui/src/anims.c diff --git a/crimata/gui/src/bounce_anim.c b/app/gui/src/bounce_anim.c similarity index 100% rename from crimata/gui/src/bounce_anim.c rename to app/gui/src/bounce_anim.c diff --git a/crimata/gui/src/eases.c b/app/gui/src/eases.c similarity index 100% rename from crimata/gui/src/eases.c rename to app/gui/src/eases.c diff --git a/crimata/gui/src/gtk-cairo_api.c b/app/gui/src/gtk-cairo_api.c similarity index 100% rename from crimata/gui/src/gtk-cairo_api.c rename to app/gui/src/gtk-cairo_api.c diff --git a/crimata/gui/src/print_anim.c b/app/gui/src/print_anim.c similarity index 100% rename from crimata/gui/src/print_anim.c rename to app/gui/src/print_anim.c diff --git a/crimata/gui/src/recording_anim.c b/app/gui/src/recording_anim.c similarity index 100% rename from crimata/gui/src/recording_anim.c rename to app/gui/src/recording_anim.c diff --git a/crimata/gui/src/standby_anim.c b/app/gui/src/standby_anim.c similarity index 100% rename from crimata/gui/src/standby_anim.c rename to app/gui/src/standby_anim.c diff --git a/crimata/gui/src/start_up_anim.c b/app/gui/src/start_up_anim.c similarity index 100% rename from crimata/gui/src/start_up_anim.c rename to app/gui/src/start_up_anim.c diff --git a/crimata/gui/src/window 2.css b/app/gui/src/window 2.css similarity index 100% rename from crimata/gui/src/window 2.css rename to app/gui/src/window 2.css diff --git a/crimata/gui/src/window 2.ui b/app/gui/src/window 2.ui similarity index 100% rename from crimata/gui/src/window 2.ui rename to app/gui/src/window 2.ui diff --git a/crimata/gui/src/window.css b/app/gui/src/window.css similarity index 100% rename from crimata/gui/src/window.css rename to app/gui/src/window.css diff --git a/crimata/gui/src/window.ui b/app/gui/src/window.ui similarity index 100% rename from crimata/gui/src/window.ui rename to app/gui/src/window.ui diff --git a/crimata/networking/include/package_handler 2.h b/app/networking/include/package_handler 2.h similarity index 100% rename from crimata/networking/include/package_handler 2.h rename to app/networking/include/package_handler 2.h diff --git a/crimata/networking/include/package_handler.h b/app/networking/include/package_handler.h similarity index 100% rename from crimata/networking/include/package_handler.h rename to app/networking/include/package_handler.h diff --git a/crimata/networking/src/package_handler 2.c b/app/networking/src/package_handler 2.c similarity index 100% rename from crimata/networking/src/package_handler 2.c rename to app/networking/src/package_handler 2.c diff --git a/crimata/networking/src/package_handler.c b/app/networking/src/package_handler.c similarity index 100% rename from crimata/networking/src/package_handler.c rename to app/networking/src/package_handler.c diff --git a/server/packages.py b/server/packages.py new file mode 100644 index 0000000..f5d3a0a --- /dev/null +++ b/server/packages.py @@ -0,0 +1,57 @@ +# server/packages.py + +HEADER_LENGTH = 20 + + +def pull(self, socket, cnvrt=False): + """ Recv a message and return type and data. If cnvrt is True and + type is 'aud', pull returns transcribed audio. """ + msg_header = socket.recv(HEADER_LENGTH) + + if not len(msg_header): + print("NO DATA RECEIVED") + return False + + # Extract type and length from header. + msg_header = msg_header.decode('ascii') + msg_header = msg_header.strip() + msg_attrbs = msg_header.split('-') + msg_type = msg_attrbs[0] + msg_length = int(msg_attrbs[1]) + + # return package data object + package = {'type': msg_type, 'data': self.recvall(socket, msg_length)} + + if cnvrt: + if package['type'] == 'aud': + package['data'] = self.transcribe(package['data']) + + return package + +def push(self, socket, data): + """ Send a message of any type. """ + encoded_data = ''.join([data, '\0']).encode('ascii') + + # makes eg. "txt-" + header = '-'.join(['txt', str(len(encoded_data))]) + header = ''.join([header, '\0']) + encoded_header = f"{header:<{HEADER_LENGTH}}".encode('ascii') + + socket.send(encoded_header + encoded_data) + +def recvall(self, socket, length): + data = bytearray() + while len(data) < length: + packet = socket.recv(length - len(data)) + if not packet: + return None + data.extend(packet) + return bytes(data) + +def send_all(self, socket, data): + while data: + sent = socket.send(data) + data = data[sent:] + + + diff --git a/server/server.py b/server/server.py new file mode 100644 index 0000000..a0e2474 --- /dev/null +++ b/server/server.py @@ -0,0 +1,50 @@ +import time +import socket +import threading + +import packages + +# port settings +IP = '127.0.0.1' +PORT = 1040 + + +class Server(pkgs.PackageHandler): + + def __init__(self, ip, port): + self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + + # Socket settings + self.server_socket.setsockopt( + socket.SOL_SOCKET, + socket.SO_REUSEADDR, + 1) + + self.server_socket.bind((ip, port)) + self.server_socket.listen() + + print(f'Listening for connections on {ip}:{port}') + self.server_loop() + + def server_loop(self): + while True: + client_socket, client_address = self.server_socket.accept() + print(f"Accepted new connection from {client_address}") + + package = self.pull(client_socket) + if package: + + if package['type'] != 'con': + continue + + user_id = int(package['data'].decode('ascii')) + + print(f"Received user ID: {user_id}") + self.push(client_socket, "Hello from the Server!") + + while True: + self.push(client_socket, "Connection still alive!") + time.sleep(2) + +if __name__ == '__main__': + server = Server(IP, PORT) \ No newline at end of file