This repository has been archived on 2020-03-29. You can view files and clone it, but cannot push or open issues or pull requests.
sampy_archive/sampy/server.py

63 lines
1.4 KiB
Python
Raw Permalink Normal View History

2018-09-24 11:37:21 +02:00
import socket
import select
2019-12-14 20:08:34 +01:00
import logging
2018-09-24 11:37:21 +02:00
from threading import Thread
from .client import Client
2019-12-14 20:08:34 +01:00
logger = logging.getLogger(__name__)
2018-09-24 11:37:21 +02:00
class Server(Thread):
BUFF_SIZE = 65535
def __init__(self, host, port):
super(Server, self).__init__()
self.daemon = True
self.host = host
self.port = port
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.socket.bind((self.host, self.port))
self.socket.setblocking(0)
self.clients = {}
def run(self):
# Main server loop
while True:
(incomming, _, _) = select.select(
[self.socket],
[],
[], 1)
if incomming:
data, addr = self.socket.recvfrom(self.BUFF_SIZE)
if addr in self.clients:
self.clients[addr].handle_data(data)
else:
try:
self.clients[addr] = Client(self, addr)
2019-12-14 20:08:34 +01:00
logger.info("Accepted connection from %s:%s" % (addr[0], addr[1]))
2018-09-24 11:37:21 +02:00
self.clients[addr].handle_data(data)
except socket.error:
try:
self.socket.close()
except:
pass
2019-12-14 20:08:34 +01:00
logger.warn("Something went very wrong...")
#exit()
return
2018-09-24 11:37:21 +02:00
clients = [x for x in self.clients.values()
2019-12-14 20:08:34 +01:00
if x.get_buffer_size() > 0]
2018-09-24 11:37:21 +02:00
for client in clients:
client.write_socket()
2018-09-26 08:41:50 +02:00
"""for c in self.clients.values():
2020-03-29 18:45:38 +02:00
print(c.__writebuffer)"""
def restart(self):
[c.restart() for c in self.clients]