Skip to content

Instantly share code, notes, and snippets.

@Zerk123
Last active November 27, 2016 18:59
Show Gist options
  • Save Zerk123/016deaa0be720e7410abd464f573014a to your computer and use it in GitHub Desktop.
Save Zerk123/016deaa0be720e7410abd464f573014a to your computer and use it in GitHub Desktop.
Stop-And-Wait Protocol
#include<iostream>
#include<windows.h>
using namespace std;
struct Data{
int dataFrame;
int dataRecieved;
int extractedDatavar;
int data;
int frame;
int deliverDat;
bool turn =true;
bool Event=true;
bool canSent = true;
};
//Functions of Sender-Side
void waitForEvent() {
cout << "Wanting 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;
int getData() {
cout << "(Network Layer Sender Side)Please, Enter the data:";
cin >> object.data;
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;
return object.data;
}
int makeFrame() {
object.frame = object.data;
return object.frame;
}
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() {
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;
object.dataRecieved = object.dataFrame;
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;
return object.deliverDat;
}
int main() {
object.canSent = true;
while (1) {
//Sender-side code
while (object.turn == true && object.canSent == true) {
waitForEvent();
if (object.Event == true) {
getData();
makeFrame();
sendFrame();
object.canSent = false;
}
break;
}
//Reciever side code
while (object.turn == false) {
if (object.Event == true) {
recieveFrame();
waitForEvent();
//Reciever to Sender code
ackFrame();
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