python server
This commit is contained in:
parent
e8b380db89
commit
7cc23bdabe
34 changed files with 107 additions and 0 deletions
57
server/packages.py
Normal file
57
server/packages.py
Normal file
|
|
@ -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-<length of msg>"
|
||||
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:]
|
||||
|
||||
|
||||
|
||||
50
server/server.py
Normal file
50
server/server.py
Normal file
|
|
@ -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)
|
||||
Loading…
Reference in a new issue