kopia lustrzana https://github.com/bmo/py-wsjtx
Add support for multicast groups to simple server
rodzic
7af3a45144
commit
c095e0691f
|
@ -9,32 +9,43 @@ import socket
|
||||||
import struct
|
import struct
|
||||||
import pywsjtx
|
import pywsjtx
|
||||||
import logging
|
import logging
|
||||||
|
import ipaddress
|
||||||
|
|
||||||
class SimpleServer(object):
|
class SimpleServer(object):
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger()
|
||||||
MAX_BUFFER_SIZE = pywsjtx.GenericWSJTXPacket.MAXIMUM_NETWORK_MESSAGE_SIZE
|
MAX_BUFFER_SIZE = pywsjtx.GenericWSJTXPacket.MAXIMUM_NETWORK_MESSAGE_SIZE
|
||||||
DEFAULT_UDP_PORT = 2237
|
DEFAULT_UDP_PORT = 2237
|
||||||
#
|
#
|
||||||
# note that '' and '127.0.0.1' behave differently. On Windows, try '' instead of 127.0.0.1 if you're not receiving any packets.
|
|
||||||
#
|
#
|
||||||
def __init__(self, ip_address='', udp_port=DEFAULT_UDP_PORT, **kwargs):
|
def __init__(self, ip_address='127.0.0.1', udp_port=DEFAULT_UDP_PORT, **kwargs):
|
||||||
self.timeout = None
|
self.timeout = None
|
||||||
|
|
||||||
if kwargs.get("timeout") is not None:
|
if kwargs.get("timeout") is not None:
|
||||||
self.timeout = kwargs.get("timeout")
|
self.timeout = kwargs.get("timeout")
|
||||||
|
|
||||||
self.sock = socket.socket(socket.AF_INET, # Internet
|
the_address = ipaddress.ip_address(ip_address)
|
||||||
socket.SOCK_DGRAM) # UDP
|
if not the_address.is_multicast:
|
||||||
|
self.sock = socket.socket(socket.AF_INET, # Internet
|
||||||
|
socket.SOCK_DGRAM) # UDP
|
||||||
|
|
||||||
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||||
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
||||||
|
self.sock.bind((ip_address, int(udp_port)))
|
||||||
|
else:
|
||||||
|
self.multicast_setup(ip_address, udp_port)
|
||||||
|
|
||||||
if self.timeout is not None:
|
if self.timeout is not None:
|
||||||
self.sock.settimeout(self.timeout)
|
self.sock.settimeout(self.timeout)
|
||||||
|
|
||||||
self.sock.bind((ip_address, int(udp_port)))
|
def multicast_setup(self, group, port=''):
|
||||||
|
|
||||||
|
|
||||||
|
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
||||||
|
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||||
|
self.sock.bind(('', port))
|
||||||
|
mreq = struct.pack("4sl", socket.inet_aton(group), socket.INADDR_ANY)
|
||||||
|
self.sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
|
||||||
|
|
||||||
# can through a sock.timeout exception if it's configured that way.
|
|
||||||
def rx_packet(self):
|
def rx_packet(self):
|
||||||
pkt, addr_port = self.sock.recvfrom(self.MAX_BUFFER_SIZE) # buffer size is 1024 bytes
|
pkt, addr_port = self.sock.recvfrom(self.MAX_BUFFER_SIZE) # buffer size is 1024 bytes
|
||||||
return(pkt, addr_port)
|
return(pkt, addr_port)
|
||||||
|
|
|
@ -119,7 +119,7 @@ def example_callback(new_grid):
|
||||||
|
|
||||||
sgps = SerialGPS()
|
sgps = SerialGPS()
|
||||||
|
|
||||||
s = pywsjtx.extra.simple_server.SimpleServer()
|
s = pywsjtx.extra.simple_server.SimpleServer('224.1.1.1',5007)
|
||||||
|
|
||||||
print("Starting wsjt-x message server")
|
print("Starting wsjt-x message server")
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue