Beispiel #1
0
        public void Send(ushort tokenId, Packet packet, RPCHandler callback)
        {
            TCPUserToken token = this._tokenManager.Get(tokenId);

            this._rpcManager.Accept(token, packet, callback);
            packet.OnSend();
            token?.Send(packet);
        }
Beispiel #2
0
 public void Send(IEnumerable <ushort> tokenIds, Packet packet)
 {
     packet.OnSend();
     byte[] data = NetworkHelper.EncodePacket(packet);
     foreach (ushort tokenId in tokenIds)
     {
         TCPUserToken token = this._tokenManager.Get(tokenId);
         token?.Send(data);
     }
 }
Beispiel #3
0
        private void ProcessReceiveDatas()
        {
            this._receivedDatas.Switch();
            while (!this._receivedDatas.isEmpty)
            {
                ReceivedData receivedData = this._receivedDatas.Pop();
                switch (receivedData.type)
                {
                case ReceivedData.Type.Accept:
                {
                    TCPUserToken newToken = this._tokenManager.Create();
                    newToken.OnSpawn(this, receivedData.conn, TimeUtils.utcTime);
                    this.OnSocketEvent?.Invoke(new SocketEvent(SocketEvent.Type.Accept,
                                                               $"Client connection accepted, remote endpoint: {receivedData.conn.RemoteEndPoint}",
                                                               SocketError.Success, newToken));
                    this.StartReceive(newToken);
                    newToken.Send(new PacketAccept(newToken.id));
                }
                break;

                case ReceivedData.Type.Receive:
                {
                    TCPUserToken token = ( TCPUserToken )receivedData.token;
                    token.ProcessData(packet =>
                        {
                            if (packet.module == NetworkConfig.INTERNAL_MODULE && packet.command == 0)
                            {
                                token.Send(new PacketHeartBeat((( PacketHeartBeat )packet).localTime));
                            }
                            else
                            {
                                this._rpcManager.Invoke(token, packet);
                                this.OnSocketEvent?.Invoke(new SocketEvent(SocketEvent.Type.Receive, packet, token));
                            }
                        });
                }
                break;
                }
            }
        }