must

Форк
0
/
com_udp.py 
63 строки · 2.0 Кб
1
import sys
2
import socket
3
import threading
4
import com_base
5

6

7
class UDPServer(com_base.BaseServer):
8
    def __init__(self, app: any) -> None:
9
        super().__init__()
10
        self.should_kill = not sys.platform == 'win32'
11
        self.app = app
12
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
13
        try:
14
            self.sock.bind((app.config['socket_ip'], app.config['socket_port']))
15
        except OSError:
16
            raise RuntimeError('Failed to create socket')
17
        self.running = True
18
        self.buf_size = 1024 * 1024 * 100
19
        self.messages = {}
20
        threading.Thread(target=self.client_thread).start()
21

22
    def update(self) -> None:
23
        pass
24

25
    def client_thread(self) -> None:
26
        # TODO: multiple clients at the same time
27
        while self.running:
28
            try:
29
                encoded_msg, new_addr = self.sock.recvfrom(self.buf_size)
30
            except OSError:
31
                continue
32
            msg = self.decode_msg(encoded_msg)
33
            self.commands.append(msg)
34
        # self.should_kill = False
35

36
    def destroy(self) -> None:
37
        self.running = False
38
        if self.sock:
39
            self.sock.close()
40
            self.sock = None
41
        self.app = None
42

43

44
class UDPClient(com_base.BaseClient):
45
    def __init__(self, app: any) -> None:
46
        super().__init__(app)
47
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
48
        self.server_addr = (app.config['socket_ip'], app.config['socket_port'])
49

50
    def send(self, msg: str) -> None:
51
        if not msg or msg == 'i_want_to_live_please_do\'nt_die':
52
            return
53
        encoded_msg = com_base.BaseServer.encode_msg(msg)
54
        try:
55
            self.sock.sendto(encoded_msg, self.server_addr)
56
        except Exception as _err:
57
            raise RuntimeError(str(_err))
58

59
    def destroy(self) -> None:
60
        super().destroy()
61
        if self.sock:
62
            self.sock.close()
63
            self.sock = None
64

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.