Example #1
0
        private static void handleIncomingHave(BinaryReader br, IPEndPoint peerAddress, ChannelId incomingChannel)
        {
            //successfull connection

            var message = new Have();

            message.Decode(br);

            Console.WriteLine($"HAVE Chunk Bin Value: {message.BinValue}");

            if (_incomingChannel == null)
            {
                _incomingChannel = incomingChannel;
            }
            else if (_incomingChannel != incomingChannel)
            {
                return;
            }

            long baseRight = BinUtils.BaseRight(message.BinValue);

            if (baseRight < _liveDiscardWindow)
            {
                Console.WriteLine("Bin smaller than live discard window");
                return;
            }
            else
            {
                long binOffset = BinUtils.LayerOffset(baseRight);

                Console.WriteLine($"HAVE Chunk Most Right: {baseRight}");
                Console.WriteLine($"HAVE Chunk Layer Offset: {binOffset}");

                long temp     = binOffset - _liveDiscardWindow + 1;
                long newBin   = BinUtils.OffsetToBin(0, temp);
                long newChunk = BinUtils.LayerOffset(newBin);

                Console.WriteLine($"NEW Computed BIN: {newBin}");
                Console.WriteLine($"NEW Computed CHUNK: {newChunk}");
            }

            Environment.Exit(0);

            var returnMessage = new Request();

            returnMessage.DestChannelId = _sendingChannel = _peers[peerAddress].SendingChannel;
            returnMessage.BinValue      = message.BinValue;

            var returnMessageBytes = returnMessage.ToByteArray();

            _client.Send(returnMessageBytes, returnMessageBytes.Length, peerAddress);
        }