This document provides a comprehensive reference for all functions, classes, and modules in the General Communications system.
Main server loop that accepts incoming client connections.
- Returns: None
- Threading: Runs in main thread
- Purpose: Continuously listens for new client connections on port 10740
Handles the multi-stage authentication process for a client.
- Parameters:
client(str): Client IP address
- Returns: None
- Threading: Spawns new thread per client
- Ports Used: 9281 (incoming), 12090 (outgoing)
Monitors client health and synchronizes message delivery.
- Parameters:
client(str): Client IP address
- Returns: None
- Threading: Runs in dedicated thread per client
- Timeout: 5 seconds
- Port: 8070
Listens for incoming messages from a specific client.
- Parameters:
client(str): Client IP address
- Returns: None
- Threading: Runs in dedicated thread per client
- Port: 9980
Sends new messages to a client based on timestamp.
- Parameters:
client(str): Client IP addresstimed(float): Timestamp threshold for new messages
- Returns: None
- Port: 6090
Joins list elements with a separator.
- Parameters:
i(list): List of strings to joins(str): Separator string (default: " ")
- Returns: str
Escapes special characters in message strings.
- Parameters:
i(str): Input string
- Returns: str with escaped characters
- Escapes:
\n→\\n,\→\\\\
exiting(bool): Server shutdown flagclients(list): Active client IP addressesdebug(int): Debug output level (0=off, 1=on)server_sockets(list): Active server socket objects
Stores a new message in the database.
- Parameters:
time(float): Unix timestampuser(str): Usernamemessage(str): Message content
- Returns: None
- File: Appends to
database.db
Removes a message by ID from the database.
- Parameters:
i(int): Message ID
- Returns: None
- File: Rewrites
database.db
Retrieves a message by ID.
- Parameters:
i(int): Message ID
- Returns: str (message record) or -1 if not found
Extracts message content from database record.
- Parameters:
message(str): Database record
- Returns: str (message content)
Extracts timestamp from database record.
- Parameters:
message(str): Database record
- Returns: float (Unix timestamp)
Extracts username from database record.
- Parameters:
message(str): Database record
- Returns: str (username)
Extracts message ID from database record.
- Parameters:
message(str): Database record
- Returns: int (message ID)
Validates message format and data types.
- Parameters:
i(str): Message record
- Returns: bool (True if valid)
- Format:
{id};{timestamp};{username};{message}
Automatically loads platform-appropriate C library:
- Windows:
16.dll - Linux/Unix:
lib16.so
c16.encode_B(char*): Encode single characterc16.decode_B(char*): Decode character pair- Both functions return
ctypes.c_char_p
Main client connection and authentication sequence.
- Returns: None
- Ports: Connects to 10740, 9281
- Threading: Spawns heartbeat and message receiver threads
Responds to server heartbeat requests.
- Returns: None
- Port: 8070 (listening)
- Response: Current timestamp as float
Receives and displays messages from server.
- Returns: None
- Port: 6090 (listening)
- Threading: Runs in dedicated thread
Interactive message composition and sending.
- Returns: None
- Port: 9980 (connects to server)
- Input: Multi-line support via prompt_toolkit
Unescapes special characters in received messages.
- Parameters:
i(str): Escaped message string
- Returns: str with unescaped characters
- Unescapes:
\\n→\n,\\\\→\
past_time(float): Last heartbeat timestampsession(PromptSession): prompt_toolkit session objectusername(str): Client username (default: "Bob")
Structure for character pair operations.
typedef struct {
char A;
char B;
} pair;Encodes a single character into two-character format.
- Parameters:
in- Input character pointer - Returns: Allocated string with encoded result
- Algorithm: Splits byte into nibbles, adds 'A' offset
- Memory: Caller must free returned pointer
Decodes two-character format back to single character.
- Parameters:
in- Two-character encoded input - Returns: Allocated string with decoded result
- Algorithm: Subtracts 'A' offset, combines nibbles
- Memory: Caller must free returned pointer
Converts character pair to integer.
- Parameters:
in- Character pair structure - Returns: Integer representation
Converts integer to character pair.
- Parameters:
in- Integer value - Returns: Character pair structure
ConnectionRefusedError: Client unavailableTimeoutError: Connection timeout (5s default)BrokenPipeError: Connection terminatedConnectionResetError: Forceful disconnection
ValueError: Invalid data type conversionKeyError: Missing dictionary keyIndexError: List/string index out of range
- Automatic client cleanup on connection errors
- Graceful degradation for invalid messages
- Timeout handling for all network operations
- Main Thread: Client acceptance loop
- Per-Client Threads:
- Authentication handler
- Heartbeat monitor
- Message listener
- Message sender (on-demand)
- Main Thread: User input and message sending
- Heartbeat Thread: Server health response
- Message Receiver Thread: Incoming message display
{id};{timestamp};{username};{message_content}
- id: Sequential integer, auto-increment
- timestamp: Unix timestamp, float precision
- username: String identifier, no semicolons
- message_content: Escaped string content
- Server:
src/Server/database.db - Client:
src/Client/cdatabase.db
All ports are hardcoded in source files:
- Modify server.py and comms.py to change port assignments
- Ensure firewall allows traffic on all required ports
Set debug = 1 in server.py for verbose output:
- Client connection status
- Authentication progress
- Message handling details
- C library compilation flags vary by platform
- Socket options may need adjustment for different OS
- File paths use forward slashes (cross-platform compatible)