ya2 · news · projects · code · about

removed unused code
[pmachines.git] / ya2 / engine / network / network.py
CommitLineData
cb700bcc
FC
1# from socket import socket, AF_INET, SOCK_DGRAM, error, SOCK_STREAM, \
2# SOL_SOCKET, SO_REUSEADDR
3# from traceback import print_exc
4# from logging import info
5# from select import select
6# from time import sleep
7# from queue import Empty
8# from threading import Thread
9# from struct import Struct, error as unpack_error
10# from _thread import interrupt_main
11# from ya2.gameobject import GameObject
12# from ya2.engine.network.binary import BinaryData
13
14
15# msg_rpc_call, msg_rpc_answ = range(2)
16
17
18# class _ConnectionError(Exception): pass
19
20
21# class NetworkThread(Thread):
22
23# def __init__(self, eng, port):
24# Thread.__init__(self)
25# self.port = port
26# self.daemon = True
27# self.eng = eng
28# self.is_running = True
29# self.size_struct = Struct('!I')
30# self.tcp_sock = socket(AF_INET, SOCK_STREAM)
31# self.tcp_sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
32# self._configure_socket()
33# self.connections = [self.tcp_sock]
34
35# def run(self):
36# while self.is_running:
37# sleep(.001)
38# try:
39# readable, writable, exceptional = select(
40# self.connections, self.connections, self.connections, 1)
41# for sock in readable: self._process_read(sock)
42# for sock in writable: self._process_write(sock)
43# for sock in exceptional: print('exception', sock.getpeername())
44# except (error, AttributeError) as exc: print_exc()
45# # AttributeError happens when the server user exits from a race,
46# # then destroy is being called but _process_read is still alive
47# # and self.eng.cb_mux.add_cb is invoked, but self.eng in None
48# except Exception as exc:
49# print_exc()
50# interrupt_main()
51
52# def _process_read(self, sock):
53# try:
54# data = self.recv_one_msg(sock)
55# if data:
56# try:
57# msg = BinaryData.unpack(data)
58# if msg[0] == msg_rpc_call:
59# funcname, args, kwargs = msg[1:]
60# self._rpc_cb(funcname, args, kwargs, sock)
61# elif msg[0] == msg_rpc_answ:
62# self._rpc_cb(msg[1], sock)
63# else:
64# args = [msg, sock]
65# self.eng.cb_mux.add_cb(self.read_cb, args)
66# except unpack_error as exc:
67# print(exc)
68# print_exc()
69# except (_ConnectionError, TypeError) as exc:
70# print_exc()
71# self.notify('on_disconnected', sock)
72# self.connections.remove(sock)
73
74# def _process_write(self, sock):
75# try:
76# msg_size, msg_data = self._queue(sock).get_nowait()
77# sock.sendall(self.size_struct.pack(msg_size))
78# sock.sendall(msg_data)
79# except Empty: pass
80
81# def recv_one_msg(self, sock):
82# lengthbuf = self.recvall(sock, self.size_struct.size)
83# try: length = self.size_struct.unpack(lengthbuf)[0]
84# except unpack_error as exc:
85# print(exc)
86# raise _ConnectionError()
87# return self.recvall(sock, length)
88
89# @staticmethod
90# def recvall(sock, cnt):
91# buf = b''
92# while cnt:
93# newbuf = sock.recv(cnt)
94# if not newbuf: return None
95# buf, cnt = buf + newbuf, cnt - len(newbuf)
96# return buf
97
98# def destroy(self):
99# self.is_running = False
100# self.tcp_sock.close()
101# self.eng = self.tcp_sock = self.connections = None
102
103
104# class AbsNetwork(GameObject):
105
106# rate = .1
107# _public_addr = None
108# _local_addr = None
109
110# def __init__(self, port):
111# GameObject.__init__(self)
112# self.netw_thr = self.read_cb = self.udp_sock = self.tcp_sock = \
113# self.udp_sock = None
114# self.port = port
115# self.addr2conn = {}
116
117# def start(self, read_cb):
118# self.eng.attach_obs(self.on_frame, 1)
119# self.read_cb = read_cb
120# self.udp_sock = socket(AF_INET, SOCK_DGRAM)
121# self.udp_sock.setblocking(0)
122# self._configure_udp()
123# try:
124# self.netw_thr = self._bld_netw_thr()
125# self.netw_thr.start()
126# self.netw_thr.read_cb = read_cb
127# args = self.__class__.__name__, self.port
128# info('%s is up, port %s' % args)
129# return True
130# except ValueError: # e.g. empty server
131# info("can't start the network")
132
133# def register_cb(self, callback):
134# self.read_cb = callback
135# self.netw_thr.read_cb = callback
136
137# def send(self, data_lst, receiver=None):
138# dgram = BinaryData.pack(data_lst)
139# self.netw_thr.send_msg(dgram, receiver)
140
141# def on_frame(self): self.process_udp()
142
143# @property
144# def is_active(self):
145# observers = self.eng.event.observers.values()
146# return self.on_frame in [obs.mth for olst in observers for obs in olst]
147
148# def stop(self):
149# if not self.netw_thr:
150# info('%s was already stopped' % self.__class__.__name__)
151# return
152# self.udp_sock.close()
153# self.netw_thr.destroy()
154# self.udp_sock = self.tcp_sock = self.netw_thr = None
155# self.eng.detach_obs(self.on_frame)
156# self.addr2conn = {}
157# info('%s has been stopped' % self.__class__.__name__)
158
159# def process_udp(self):
160# try: dgram, conn = self.udp_sock.recvfrom(8192)
161# except error: return
162# self.on_udp_pck(dgram, conn)
163# dgram = BinaryData.unpack(dgram)
164# sender, payload = dgram[0], dgram[1:]
165# self.read_cb(payload, conn)
166
167# def on_udp_pck(self, dgram, conn): pass
168
169# def destroy(self):
170# self.stop()
171# info('%s has been destroyed' % self.__class__.__name__)
172# GameObject.destroy(self)