Beispiel #1
0
 private void sendRetryFrame()
 {
     Frame retFrame = new Frame(new byte[0], Data.RETFrame);
     stopSendingFrames();
     Console.WriteLine("Sending RET...");
     physicalLayer.sendFrame(retFrame.serialize());
     continueSendingFrames();
 }
Beispiel #2
0
        private void sendLinkFrame()
        {
            while (true)
            {
                if (physicalLayer.connectionActive)
                {
                    if (linkFramesSended >= 3)
                    {
                        linkStatus = false;
                        return;
                    }
                    else
                    {
                        if (canSend)
                        {
                            Frame LinkFrame = new Frame(new byte[0], Data.LINKFrame);

                            stopSendingFrames();
                            Console.WriteLine("Sending LINK...");
                            physicalLayer.sendFrame(LinkFrame.serialize());
                            continueSendingFrames();

                            linkFramesSended += 1;
                        }

                    }

                }
                Thread.Sleep(Data.LinkFrameTimeout);
            }
        }
Beispiel #3
0
        //Обработка информационного кадра
        private void processInfoFrame(Frame frame)
        {
            Frame ackFrame = new Frame(new byte[0], Data.ACKFrame);

                Console.WriteLine(getString(frame.getData()));

                stopSendingFrames();
                Console.WriteLine("Sending ACK...");
                physicalLayer.sendFrame(ackFrame.serialize());
                continueSendingFrames();

                this.stringsBuffer.Enqueue(getString(frame.getData()));
        }
Beispiel #4
0
 private void sendLinkAckFrame()
 {
     Frame LinkACKFrame = new Frame(new byte[0], Data.LINK_ACKFrame);
     while (!canSend) { }
     stopSendingFrames();
     Console.WriteLine("Sending LINK_ACK...");
     physicalLayer.sendFrame(LinkACKFrame.serialize());
     continueSendingFrames();
 }
Beispiel #5
0
        //Обработка системного кадра
        private void processControlFrame(Frame frame)
        {
            //Если пришел ACK, то удалять из очереди и ставить флаг wasSended = false
            if (frame.getType() == Data.ACKFrame)
            {
                lock (framesToSend)
                {
                    Frame pulled = null;
                    framesToSend.TryDequeue(out pulled);
                }
                Console.WriteLine("ACK received");
                this.frameWasSended = false;

            }
            //Если пришел RET, то ставить флаг wasSended = false;
            if (frame.getType() == Data.RETFrame)
            {
                this.frameWasSended = false;
            }

            if (frame.getType() == Data.LINKFrame)
            {
                sendLinkAckFrame();
            }

            if (frame.getType() == Data.LINK_ACKFrame)
            {
                linkStatus = true;
                linkFramesSended = 0;
            }
        }