36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
#===============================================================
|
|
# --- (Un)Pack msg length and msg itself ---
|
|
#===============================================================
|
|
from struct import *
|
|
import asyncio, socket
|
|
|
|
def send_msg(sock, msg):
|
|
# Prefix each message with a 4-byte length (network byte order)
|
|
msg = struct.pack('>I', len(msg)) + msg
|
|
sock.sendall(msg)
|
|
|
|
def send_msg_async(writer, msg):
|
|
# Prefix each message with a 4-byte length (network byte order)
|
|
msg = struct.pack('>I', len(msg)) + msg
|
|
writer.write(msg)
|
|
#sock.sendall(msg)
|
|
|
|
def recv_msg(reader):
|
|
# Read message length and unpack it into an integer
|
|
raw_msglen = reader.read(255)
|
|
if not raw_msglen:
|
|
return None
|
|
msglen = unpack('>I', raw_msglen)[0]
|
|
# Read the message data
|
|
return recvall(reader)
|
|
|
|
def recvall(reader, n):
|
|
# Helper function to recv n bytes or return None if EOF is hit
|
|
data = bytearray()
|
|
while len(data) < n:
|
|
packet = reader.read(n - len(data))
|
|
if not packet:
|
|
return None
|
|
data.extend(packet)
|
|
return data
|