added code for sliding window, in testing phase
This commit is contained in:
parent
1c3e9f70b1
commit
14d91d3406
64
Codes/sliding-window.cpp
Normal file
64
Codes/sliding-window.cpp
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
#include <queue>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
const int WINDOW_SIZE = 5; // size of the sliding window
|
||||||
|
|
||||||
|
class SlidingWindow {
|
||||||
|
private:
|
||||||
|
vector<int> sent_frames; // queue of sent frames
|
||||||
|
int next_frame_to_send; // index of the next frame to send
|
||||||
|
int next_frame_to_receive; // index of the next frame to receive
|
||||||
|
|
||||||
|
public:
|
||||||
|
SlidingWindow() : next_frame_to_send(0), next_frame_to_receive(0) {}
|
||||||
|
|
||||||
|
// send a frame
|
||||||
|
void send_frame(int frame_number) {
|
||||||
|
if (sent_frames.size() < WINDOW_SIZE) {
|
||||||
|
sent_frames.push_back(frame_number);
|
||||||
|
next_frame_to_send++;
|
||||||
|
cout << "Sent frame " << frame_number << endl;
|
||||||
|
} else {
|
||||||
|
cout << "Window is full, cannot send frame " << frame_number << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// receive a frame
|
||||||
|
void receive_frame(int frame_number) {
|
||||||
|
if (frame_number == next_frame_to_receive) {
|
||||||
|
next_frame_to_receive++;
|
||||||
|
cout << "Received frame " << frame_number << endl;
|
||||||
|
} else {
|
||||||
|
cout << "Received frame " << frame_number << ", but expected frame " << next_frame_to_receive << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove acknowledged frames from the sent_frames queue
|
||||||
|
while (!sent_frames.empty() && sent_frames.front() <= next_frame_to_receive - 1) {
|
||||||
|
sent_frames.erase(sent_frames.begin());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
SlidingWindow window;
|
||||||
|
|
||||||
|
// send some frames
|
||||||
|
window.send_frame(0);
|
||||||
|
window.send_frame(1);
|
||||||
|
window.send_frame(2);
|
||||||
|
window.send_frame(3);
|
||||||
|
window.send_frame(4);
|
||||||
|
window.send_frame(5);
|
||||||
|
|
||||||
|
// receive some frames
|
||||||
|
window.receive_frame(0);
|
||||||
|
window.receive_frame(1);
|
||||||
|
window.receive_frame(2);
|
||||||
|
window.receive_frame(3);
|
||||||
|
window.receive_frame(4);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user