From 4e1f9996fe9ef5ccff4f6e7e2c17fbdbd285b2f0 Mon Sep 17 00:00:00 2001 From: Vytor Calixto <vytorcalixto@gmail.com> Date: Mon, 7 Dec 2015 17:45:21 -0200 Subject: [PATCH] Set transmit data endable --- Protocol.cpp | 10 ++++------ Protocol.h | 2 +- client.cpp | 23 ++++++++++++++++++++++- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/Protocol.cpp b/Protocol.cpp index a376c73..7d37b7a 100644 --- a/Protocol.cpp +++ b/Protocol.cpp @@ -113,11 +113,11 @@ int Protocol::recvMessage(int sockt){ return (int)msg.type.to_ulong(); } -void Protocol::transmit(int sockt, int window){ +void Protocol::transmit(int sockt, int window, bool dataEndable){ int status; vector<FrameItem> frame; int lastFramed = -1; - setData(vector<BYTE>(1, 0), ENDTX); + if(dataEndable) setData(vector<BYTE>(1, 0), ENDTX); int messagesLeft = messages.size(); Protocol response; while(messagesLeft > 0){ @@ -171,9 +171,6 @@ void Protocol::transmit(int sockt, int window){ } } reset(); - vector<BYTE> val(1,(BYTE)0); - setData(val, ENDTX); - sendMessage(sockt,0); } int Protocol::receive(int sockt, int type, int window, bool dataEndable){ @@ -190,7 +187,7 @@ int Protocol::receive(int sockt, int type, int window, bool dataEndable){ } status = recvMessage(sockt); cout << "receive status:" << status << endl; - cout << "sequence: "<<messages.back().sequence.to_ulong()<<" next: "<<nextSequence<<endl; + // cout << "sequence: "<<messages.back().sequence.to_ulong()<<" next: "<<nextSequence<<endl; if(status == NOISE){ continue; } else if(status == type) { @@ -219,6 +216,7 @@ int Protocol::receive(int sockt, int type, int window, bool dataEndable){ vector<BYTE> val(1,(BYTE)messages.back().sequence.to_ulong()); response.setData(val, ACK); response.sendMessages(sockt); + messages.pop_back(); } return 0; } diff --git a/Protocol.h b/Protocol.h index 76bf29b..2427224 100644 --- a/Protocol.h +++ b/Protocol.h @@ -18,7 +18,7 @@ public: string getDataAsString(); int recvMessage(int sockt); void addMessage(Message msg); - void transmit(int sockt, int window); + void transmit(int sockt, int window, bool dataEndable); int receive(int sockt, int type, int window, bool dataEndable); void reset(); diff --git a/client.cpp b/client.cpp index c5f3b50..cf6fcaa 100644 --- a/client.cpp +++ b/client.cpp @@ -65,13 +65,34 @@ int main(){ } else { cout << "ERROR: arquivo não existe\n"; } + sendProtocol.reset(); + receiveProtocol.reset(); }else if(command == "get"){ args = line.substr(pos+1, line.size()); sendProtocol.setData(vector<BYTE>(args.begin(), args.end()), GET); sendProtocol.sendMessage(sockt, 0); int error = receiveProtocol.receive(sockt, SIZE, WAIT_STOP, false); if(error < 0) continue; - // int fileSize = (int) receiveProtocol.getDataAsString()[0]; + string s_size = receiveProtocol.getDataAsString(); + cout << s_size << endl; + unsigned int fileSize = stoi(s_size); + cout << "Tamanho: " << fileSize << endl; + sendProtocol.reset(); + if(hasEnoughSpace(fileSize)) { + sendProtocol.setData(vector<BYTE>(1,(BYTE)0), OK); + sendProtocol.sendMessage(sockt,0); + } else { + cout << "ERROR: não há espaço disponível\n"; + sendProtocol.setData(vector<BYTE>(1,(BYTE)SPACE_ERR), ERROR); + sendProtocol.sendMessage(sockt,0); + continue; + } + receiveProtocol.reset(); + receiveProtocol.receive(sockt,DATA,SLIDING,true); + cout <<"conteudo: "<< receiveProtocol.getDataAsString()<<endl; + writeFile(getWorkingPath()+"/"+args,receiveProtocol.getData()); + sendProtocol.reset(); + receiveProtocol.reset(); }else if(command == "help"){ printCommandsList(); }else{ -- GitLab