bool IServerTransportLayer.Init(int channelId, OnClientConnect connectCallback, OnReceiveMessage messageCallback, OnClientDisconnect disconnectCallback) { _connection = new MiniUDP.NetCore(ConnectionToken, true); _channelId = channelId; _clients = new Dictionary <int, MiniUDP.NetPeer>(); _nextId = 0; _connection.PeerConnected += (peer, token) => { _clients.Add(_nextId, peer); var id = new PerChannelID(channelId, _nextId++); connectCallback.Invoke(peer.EndPoint.Address, id); peer.PayloadReceived += (netPeer, data, length) => { if (data.Length != length) { Array.Resize(ref data, length); } messageCallback.Invoke(data, id); }; }; _connection.PeerClosed += (peer, reason, kickReason, error) => { var id = _clients.FirstOrDefault(i => i.Value == peer).Key; disconnectCallback.Invoke(new PerChannelID(_channelId, id)); _clients.Remove(id); }; return(true); }
bool IClientTransportLayer.Init(int channelId, OnConnected connectedCallback, Generic.Client.OnReceiveMessage messageCallback, OnDisconnected disconnectedCallback) { _connection = new MiniUDP.NetCore(ConnectionToken, false); _channelId = channelId; _connection.PeerConnected += (peer, token) => { // Peer will be the server connectedCallback.Invoke(_channelId); peer.PayloadReceived += (netPeer, data, length) => { if (data.Length != length) { Array.Resize(ref data, length); } messageCallback.Invoke(data); }; }; _connection.PeerClosed += (peer, reason, kickReason, error) => disconnectedCallback.Invoke(_channelId); return(true); }