コード例 #1
0
        public void NatIntroduce(
            NetEndPoint hostInternal,
            NetEndPoint hostExternal,
            NetEndPoint clientInternal,
            NetEndPoint clientExternal,
            string additionalInfo)
        {
            NetDataWriter dw = new NetDataWriter();

            //First packet (server)
            //send to client
            dw.Put(ClientByte);
            dw.Put(hostInternal);
            dw.Put(hostExternal);
            dw.Put(additionalInfo, MaxTokenLength);

            _netBase.SendRaw(NetPacket.CreateRawPacket(PacketProperty.NatIntroduction, dw), clientExternal);

            //Second packet (client)
            //send to server
            dw.Reset();
            dw.Put(HostByte);
            dw.Put(clientInternal);
            dw.Put(clientExternal);
            dw.Put(additionalInfo, MaxTokenLength);

            _netBase.SendRaw(NetPacket.CreateRawPacket(PacketProperty.NatIntroduction, dw), hostExternal);
        }
コード例 #2
0
 private void Send <T>(T packet, IPEndPoint target) where T : class, new()
 {
     _cacheWriter.Reset();
     _cacheWriter.Put((byte)PacketProperty.NatMessage);
     _netPacketProcessor.Write(_cacheWriter, packet);
     _socket.SendRaw(_cacheWriter.Data, 0, _cacheWriter.Length, target);
 }
コード例 #3
0
        internal void FlushMergePacket()
        {
            //If merging enabled
            if (_mergePos > 0)
            {
                if (_mergeCount > 1)
                {
                    NetUtils.DebugWrite("Send merged: " + _mergePos + ", count: " + _mergeCount);
                    _mergeData.Size     = NetConstants.HeaderSize + _mergePos;
                    _mergeData.Property = PacketProperty.Merged;
                    _mergeData.Prepare();
                    _netManager.SendRaw(_mergeData.RawData, 0, _mergeData.Size, _remoteEndPoint);
#if STATS_ENABLED
                    Statistics.PacketsSent++;
                    Statistics.BytesSent += (ulong)(NetConstants.HeaderSize + _mergePos);
#endif
                }
                else
                {
                    //Send without length information and merging
                    _netManager.SendRaw(_mergeData.RawData, sizeof(ushort), _mergePos - sizeof(ushort), _remoteEndPoint);
#if STATS_ENABLED
                    Statistics.PacketsSent++;
                    Statistics.BytesSent += (ulong)(_mergePos - 2);
#endif
                }
                _mergePos   = 0;
                _mergeCount = 0;
            }
        }
コード例 #4
0
        internal bool SendRawData(NetPacket packet)
        {
            //2 - merge byte + minimal packet size + datalen(ushort)
            if (_netManager.MergeEnabled &&
                CanMerge(packet.Property) &&
                _mergePos + packet.Size + NetConstants.HeaderSize * 2 + 2 < _mtu)
            {
                FastBitConverter.GetBytes(_mergeData.RawData, _mergePos + NetConstants.HeaderSize, (ushort)packet.Size);
                Buffer.BlockCopy(packet.RawData, 0, _mergeData.RawData, _mergePos + NetConstants.HeaderSize + 2, packet.Size);
                _mergePos += packet.Size + 2;
                _mergeCount++;

                //DebugWriteForce("Merged: " + _mergePos + "/" + (_mtu - 2) + ", count: " + _mergeCount);
                return(true);
            }

            NetUtils.DebugWrite(ConsoleColor.DarkYellow, "[P]SendingPacket: " + packet.Property);
            if (_netManager.SendRaw(packet.RawData, 0, packet.Size, _remoteEndPoint))
            {
#if STATS_ENABLED
                Statistics.PacketsSent++;
                Statistics.BytesSent += (ulong)packet.Size;
#endif
                return(true);
            }
            return(false);
        }
コード例 #5
0
        //"Connect to" constructor
        internal NetPeer(NetManager netManager, IPEndPoint remoteEndPoint, byte connectNum, NetDataWriter connectData) : this(netManager, remoteEndPoint)
        {
            Initialize();
            _connectId       = DateTime.UtcNow.Ticks;
            _connectionState = ConnectionState.InProgress;
            ConnectionNum    = connectNum;

            //Make initial packet
            _connectRequestPacket = NetConnectRequestPacket.Make(connectData, _connectId);
            _connectRequestPacket.ConnectionNumber = connectNum;

            //Send request
            _netManager.SendRaw(_connectRequestPacket, _remoteEndPoint);

            NetUtils.DebugWrite(ConsoleColor.Cyan, "[CC] ConnectId: {0}, ConnectNum: {1}", _connectId, connectNum);
        }
コード例 #6
0
        //"Connect to" constructor
        internal NetPeer(NetManager netManager, IPEndPoint remoteEndPoint, int id, byte connectNum,
                         NetDataWriter connectData)
            : this(netManager, remoteEndPoint, id)
        {
            ConnectTime     = DateTime.UtcNow.Ticks;
            ConnectionState = ConnectionState.Outgoing;
            ConnectionNum   = connectNum;

            //Make initial packet
            _connectRequestPacket = NetConnectRequestPacket.Make(connectData, remoteEndPoint.Serialize(), ConnectTime);
            _connectRequestPacket.ConnectionNumber = connectNum;

            //Send request
            NetManager.SendRaw(_connectRequestPacket, EndPoint);

            NetDebug.Write(NetLogLevel.Trace, "[CC] ConnectId: {0}, ConnectNum: {1}", ConnectTime, connectNum);
        }
コード例 #7
0
ファイル: NetPeer.cs プロジェクト: zhaocy1217/War-Clash
        internal void SendRawData(NetPacket packet)
        {
            //2 - merge byte + minimal packet size + datalen(ushort)
            if (_peerListener.MergeEnabled &&
                CanMerge(packet.Property) &&
                _mergePos + packet.Size + NetConstants.HeaderSize * 2 + 2 < _mtu)
            {
                FastBitConverter.GetBytes(_mergeData.RawData, _mergePos + NetConstants.HeaderSize, (ushort)packet.Size);
                Buffer.BlockCopy(packet.RawData, 0, _mergeData.RawData, _mergePos + NetConstants.HeaderSize + 2, packet.Size);
                _mergePos += packet.Size + 2;
                _mergeCount++;

                //DebugWriteForce("Merged: " + _mergePos + "/" + (_mtu - 2) + ", count: " + _mergeCount);
                return;
            }

            NetUtils.DebugWrite(ConsoleColor.DarkYellow, "[P]SendingPacket: " + packet.Property);
            _peerListener.SendRaw(packet.RawData, 0, packet.Size, _remoteEndPoint);
        }
コード例 #8
0
ファイル: NetPeer.cs プロジェクト: DeanReynolds/SharpXNA
        //Connect constructor
        internal NetPeer(NetManager netManager, IPEndPoint remoteEndPoint, NetDataWriter connectData) : this(netManager, remoteEndPoint)
        {
            _connectAttempts = 0;
            _connectId       = DateTime.UtcNow.Ticks;
            _connectionState = ConnectionState.InProgress;

            //Make initial packet
            _connectRequestPacket = new NetPacket(PacketProperty.ConnectRequest, 12 + connectData.Length);

            //Add data
            FastBitConverter.GetBytes(_connectRequestPacket.RawData, 1, NetConstants.ProtocolId);
            FastBitConverter.GetBytes(_connectRequestPacket.RawData, 5, _connectId);
            Buffer.BlockCopy(connectData.Data, 0, _connectRequestPacket.RawData, 13, connectData.Length);

            //Send request
            _netManager.SendRaw(_connectRequestPacket, _remoteEndPoint);

            NetUtils.DebugWrite(ConsoleColor.Cyan, "[CC] ConnectId: {0}", _connectId);
        }
コード例 #9
0
ファイル: NetPeer.cs プロジェクト: Norne9/NecroServer
        private void SendConnectRequest()
        {
            //Get connect key bytes
            byte[] keyData = Encoding.UTF8.GetBytes(_peerListener.ConnectKey);

            //Make initial packet
            var connectPacket = NetPacket.CreateRawPacket(PacketProperty.ConnectRequest, 12 + keyData.Length);

            //Add data
            FastBitConverter.GetBytes(connectPacket, 1, NetConstants.ProtocolId);
            FastBitConverter.GetBytes(connectPacket, 5, _connectId);
            Buffer.BlockCopy(keyData, 0, connectPacket, 13, keyData.Length);

            //Send raw
            _peerListener.SendRaw(connectPacket, _remoteEndPoint);
        }