Skip to content

Instantly share code, notes, and snippets.

@Zerk123
Last active August 27, 2018 14:22
Show Gist options
  • Save Zerk123/bbd8283a7cf0442d0fedfecb47272dd4 to your computer and use it in GitHub Desktop.
Save Zerk123/bbd8283a7cf0442d0fedfecb47272dd4 to your computer and use it in GitHub Desktop.
Stop-And-Wait Protocol ARQ
#include<iostream>
#include<windows.h>
#include<time.h>
#define Index 5
using namespace std;
struct Data {
int dataFrame;
int dataRecieved;
int extractedDatavar;
int data[Index];
int *Sn;
int *Rn;
int frame;
int deliverDat;
bool turn = true;
bool input = true;
bool Event = true;
bool canSent = true;
bool Extrachk = true;
bool Extrachk1 = true;
};
//Functions of Sender-Side
void waitForEvent() {
cout << "Waiting for event";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << "." << endl;
}
Data object;
void getData() {
cout << "(Network Layer Sender Side)Please, Enter the data:";
for (int i = 0; i < Index; i++) {
cin >> object.data[i];
}
object.data;
cout << "(Data Link Layer Sender Side)Making Frame";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << "." << endl;
}
void makeFrame() {
if (object.Extrachk == true) {
object.Sn = object.data;
object.Extrachk = false;
}
object.frame = *(object.Sn);
}
int sendFrame() {
cout << "(Physical Layer Sender Side)Sending Frame";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << "." << endl;
object.dataFrame = object.frame;
object.turn = false;
return object.dataFrame;
}
void ackFrame() {
cout << "(FROM RECEIVER SIDE TO SENDER SIDE)Note:Acknowledgement Send to receiver" << endl;
}
//Functions of Reciver-Side
int recieveFrame() {
if (object.Extrachk1 == true) {
object.Rn = object.data;
object.Extrachk1 = false;
}
cout << "(Physical Layer Receiver side)Receiving Frame";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << "." << endl;
if (*(object.Sn) == *(object.Rn)) {
object.dataRecieved = object.dataFrame;
}
object.Sn++;
object.Rn++;
return object.dataRecieved;
}
int extractData() {
cout << "(Data Link Layer Receiver Side)Extracting the Data";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << "." << endl;
object.extractedDatavar = object.dataRecieved;
return object.extractedDatavar;
}
int deliverData() {
if (object.turn == false) {
object.turn == true;
}
object.deliverDat = object.extractedDatavar;
cout << "(Data Link Layer Receiver)Delivering Data";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << ".";
Sleep(1000);
cout << "." << endl;
cout << "Note:(Network Layer Receiver Side)Data delivered" << endl;
cout << "Recieved Data:" << object.deliverDat;
return object.deliverDat;
}
int main() {
//variables of main
time_t start=0, end=0;
double difference;
object.canSent = true;
for (int i = 0; i < Index; i++) {
//Sender-side code
while (object.turn == true && object.canSent == true) {
waitForEvent();
time(&start);
if (object.Event == true) {
if (object.input == true) {
getData();
object.input = false;
}
makeFrame();
sendFrame();
object.canSent = false;
}
break;
}
//Reciever side code
while (object.turn == false) {
if (object.Event == true) {
recieveFrame();
waitForEvent();
//Reciever to Sender code
ackFrame();
time(&end);
difference = difftime(end,start);
cout << "Time take :" << difference << endl;
object.canSent = true;
extractData();
deliverData();
object.turn = true;
break;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment