66 lines
1.9 KiB
Python
66 lines
1.9 KiB
Python
import socket
|
|
from . import Messages
|
|
from .Thing import Thing
|
|
|
|
|
|
class Participant:
|
|
publishInterval = 3 # 3 seconds
|
|
def __init__(self, ipAddress, port):
|
|
self.buffer = bytearray(256)
|
|
self.ipAddress = ipAddress
|
|
self.port = port
|
|
self.udpSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
self.udpSocket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
|
# self.udpSocket.bind(("0.0.0.0", 7681))
|
|
self.buffer = bytearray(256)
|
|
|
|
self.network_id = 0
|
|
self.nextPublishMe = 0
|
|
|
|
def SendBuffer(self, bufferSize):
|
|
if self.ipAddress is None:
|
|
return False
|
|
|
|
if bufferSize <= 0:
|
|
return True
|
|
|
|
self.udpSocket.sendto(self.buffer[:bufferSize], (self.ipAddress, self.port))
|
|
return True
|
|
|
|
def PublishBuffer(self, bufferSize):
|
|
if self.ipAddress is None:
|
|
return False
|
|
|
|
if bufferSize <= 0:
|
|
return True
|
|
|
|
self.udpSocket.sendto(self.buffer[:bufferSize], ('<broadcast>', self.port))
|
|
return True
|
|
|
|
def PublishMe(self):
|
|
msg = Messages.ClientMsg(self.network_id)
|
|
msg.Publish(self)
|
|
|
|
def Update(self, currentTime):
|
|
if (currentTime > self.nextPublishMe):
|
|
self.PublishMe()
|
|
self.nextPublishMe = currentTime + Participant.publishInterval
|
|
|
|
Thing.UpdateAll(currentTime)
|
|
|
|
def ProcessClientMsg(self, data: bytearray):
|
|
pass
|
|
def ProcessNetworkIdMsg(self, data: bytearray):
|
|
pass
|
|
|
|
def ReceiveData(self, data):
|
|
msgId = data[0]
|
|
match msgId:
|
|
case Messages.ClientMsg.id:
|
|
msg = Messages.ClientMsg(data)
|
|
self.ProcessClientMsg(msg)
|
|
case Messages.NetworkIdMsg.id:
|
|
msg = Messages.NetworkIdMsg(data)
|
|
self.ProcessNetworkIdMsg(msg)
|
|
|