Preoblikovan client v knjižnjico

client.py se sedaj lahko uporablja kot samostojen program (enaka uporaba kot prej) ali kot knjižnjica.
This commit is contained in:
Žiga Kralj 2024-10-09 10:53:09 +02:00
parent 7963237bc0
commit 3e0311ba9b
2 changed files with 65 additions and 62 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/__pycache__

View File

@ -9,6 +9,7 @@
#
# Author: Jakob Kordež, S52KJ
# Docker: Žiga Kralj, S50ZK
# GUI: Žiga Kralj, S50ZK
#
######################################################
@ -22,61 +23,25 @@ from socket import (
SO_BROADCAST,
)
from select import select
import sys
from argparse import ArgumentParser
import re
SERVER = "localhost"
PORT = 4996
def connect_proxy(server, port):
# Create broadcast socket
broadcastSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
broadcastSocket.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
# Argument parsing
serverRegex = r"^(?P<host>[^:]+)(:(?P<port>\d+))?$"
parser = ArgumentParser(
prog="FlexRadio discovery proxy client",
description="Connect to a FlexRadio discovery proxy and re-broadcast all received packets",
epilog="Author: Jakob Kordež, S52KJ",
)
parser.add_argument(
"server",
metavar="SERVER",
type=str,
nargs="?",
default=SERVER,
help="Server address (default: %(default)s)",
)
args = parser.parse_args()
sp = re.fullmatch(serverRegex, args.server)
if not sp:
print("Invalid server address")
sys.exit(1)
SERVER = sp.group("host")
if sp.group("port"):
PORT = int(sp.group("port"))
# Create broadcast socket
broadcastSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
broadcastSocket.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
# Connect to TCP server
with socket(AF_INET, SOCK_STREAM) as s:
# Connect to TCP server
with socket(AF_INET, SOCK_STREAM) as s:
s.settimeout(5)
print("Connecting to server...", (SERVER, PORT))
print("Connecting to server...", (server, port))
# Try to connect to the server for 5 seconds
try:
s.connect((SERVER, PORT))
s.connect((server, port))
print("Connected to server")
print("\nPress Ctrl+C to exit...")
except (ConnectionRefusedError, TimeoutError):
print("Connection timed out")
input("\nPress enter to exit...")
sys.exit(1)
return 1
s.setblocking(False)
@ -94,4 +59,41 @@ with socket(AF_INET, SOCK_STREAM) as s:
broadcastSocket.sendto(payload, ("255.255.255.255", 4992))
except KeyboardInterrupt:
print("\nExiting...")
sys.exit(0)
return 0
if __name__ == "__main__":
import sys
from argparse import ArgumentParser
import re
SERVER = "localhost"
PORT = 4996
# Argument parsing
serverRegex = r"^(?P<host>[^:]+)(:(?P<port>\d+))?$"
parser = ArgumentParser(
prog="FlexRadio discovery proxy client",
description="Connect to a FlexRadio discovery proxy and re-broadcast all received packets",
epilog="Author: Jakob Kordež, S52KJ",
)
parser.add_argument(
"server",
metavar="SERVER",
type=str,
nargs="?",
default=SERVER,
help="Server address (default: %(default)s)",
)
args = parser.parse_args()
sp = re.fullmatch(serverRegex, args.server)
if not sp:
print("Invalid server address")
sys.exit(1)
SERVER = sp.group("host")
if sp.group("port"):
PORT = int(sp.group("port"))
sys.exit(connect_proxy(SERVER, PORT))