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); }
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); }
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; } }
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); }
//"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); }
//"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); }
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); }
//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); }
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); }