Last active
November 27, 2016 18:59
-
-
Save Zerk123/016deaa0be720e7410abd464f573014a to your computer and use it in GitHub Desktop.
Stop-And-Wait Protocol
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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