Added base client and server enet comonents
This commit is contained in:
parent
4926a53c44
commit
78b65054ff
1
enetcomponents/__init__.py
Normal file
1
enetcomponents/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
# -*- coding: utf-8 -*-
|
40
enetcomponents/client.py
Normal file
40
enetcomponents/client.py
Normal file
@ -0,0 +1,40 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import time
|
||||
import json
|
||||
import enet
|
||||
|
||||
class client(object):
|
||||
|
||||
def __init__(self, host=b"localhost", port=33333, peer_count=1, channel_limit=4, incoming_bandwidth=0, outgoing_bandwidth=0):
|
||||
self.host = enet.Host(None, peer_count, channel_limit, incoming_bandwidth, outgoing_bandwidth)
|
||||
address = enet.Address(host, port)
|
||||
self.peer = self.host.connect(address, channel_limit)
|
||||
|
||||
def run(self):
|
||||
running = True
|
||||
while running:
|
||||
event = self.host.service(0)
|
||||
if event.type == enet.EVENT_TYPE_CONNECT:
|
||||
print("%s: CONNECT" % event.peer.address)
|
||||
elif event.type == enet.EVENT_TYPE_DISCONNECT:
|
||||
print("%s: DISCONNECT" % event.peer.address)
|
||||
elif event.type == enet.EVENT_TYPE_RECEIVE:
|
||||
print("%s: IN: %r" % (event.peer.address, event.packet.data))
|
||||
time.sleep(0.001)
|
||||
|
||||
def send_data(self, channel, data, reliable=True):
|
||||
data_str = json.dumps(data, ensure_ascii=False)
|
||||
data_bytes = bytes(data_str, "utf-8")
|
||||
if reliable:
|
||||
flags = enet.PACKET_FLAG_RELIABLE
|
||||
else:
|
||||
flags = enet.PACKET_FLAG_UNSEQUENCED
|
||||
packet = enet.Packet(data_bytes, flags)
|
||||
self.peer.send(channel, packet)
|
||||
|
||||
def disconnect(self):
|
||||
self.peer.disconnect()
|
||||
|
||||
def __del__(self):
|
||||
del self.host
|
||||
del self.peer
|
71
enetcomponents/server.py
Normal file
71
enetcomponents/server.py
Normal file
@ -0,0 +1,71 @@
|
||||
import enet
|
||||
import time
|
||||
import json
|
||||
|
||||
class channel(object):
|
||||
|
||||
def __init__(self, peer):
|
||||
self.peer = peer
|
||||
|
||||
def send_data(self, channel, data, reliable=True):
|
||||
data_str = json.dumps(data, ensure_ascii=False)
|
||||
data_bytes = bytes(data_str, "utf-8")
|
||||
if reliable:
|
||||
flags = enet.PACKET_FLAG_RELIABLE
|
||||
else:
|
||||
flags = enet.PACKET_FLAG_UNSEQUENCED
|
||||
packet = enet.Packet(data_bytes, flags)
|
||||
self.peer.send(channel, packet)
|
||||
|
||||
def network(self, event, data):
|
||||
print(data)
|
||||
|
||||
def disconnect(self):
|
||||
self.peer.disconnect()
|
||||
|
||||
class server(object):
|
||||
|
||||
def __init__(self, host=b"localhost", port=33333, peer_count=10, channel_limit=4, incoming_bandwidth=0, outgoing_bandwidth=0):
|
||||
address = enet.Address(host, port)
|
||||
self.host = enet.Host(address, peer_count, channel_limit, incoming_bandwidth, outgoing_bandwidth)
|
||||
self.peers = {}
|
||||
|
||||
def run(self):
|
||||
running = True
|
||||
while running:
|
||||
event = self.host.service(0)
|
||||
if event.type == enet.EVENT_TYPE_CONNECT:
|
||||
self.connected(event.peer)
|
||||
elif event.type == enet.EVENT_TYPE_DISCONNECT:
|
||||
self.disconnected(event.peer)
|
||||
elif event.type == enet.EVENT_TYPE_RECEIVE:
|
||||
channel_object = self.get_channel(event.peer)
|
||||
if channel_object == None:
|
||||
print("Error receiving packet for invalid channel: %r" % (event.data))
|
||||
return
|
||||
data = event.packet.data
|
||||
data_dict = json.loads(data, encoding="utf-8")
|
||||
channel_object.network(event, data_dict)
|
||||
time.sleep(0.0001)
|
||||
|
||||
def get_channel(self, peer):
|
||||
for channel in self.peers:
|
||||
if peer.incomingPeerID == channel.peer.incomingPeerID:
|
||||
return channel
|
||||
|
||||
def connected(self, peer):
|
||||
p = channel(peer)
|
||||
self.peers[p] = True
|
||||
print(len(self.peers))
|
||||
p.send_data(0, dict(action="connected"), False)
|
||||
print("%s: CONNECTED" % peer.address)
|
||||
|
||||
def disconnected(self, peer):
|
||||
for channel in self.peers:
|
||||
if peer.incomingPeerID == channel.peer.incomingPeerID:
|
||||
del self.peers[channel]
|
||||
print("%s: DISCONNECT" % peer.address)
|
||||
break
|
||||
|
||||
def __del__(self):
|
||||
del self.host
|
Loading…
Reference in New Issue
Block a user