git-svn-id: svn://db.shs.com.ru/pip@540 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -300,7 +300,7 @@ void PIKbdListener::readKeyboard() {
|
|||||||
tm_dbl.reset();
|
tm_dbl.reset();
|
||||||
}
|
}
|
||||||
else if (mb < me.buttons) me.action = MouseButtonRelease;
|
else if (mb < me.buttons) me.action = MouseButtonRelease;
|
||||||
else {piCoutObj << "WTF"; break;}
|
else {if (mb != 0) piCoutObj << "WTF"; break;}
|
||||||
}
|
}
|
||||||
me.buttons = mb;
|
me.buttons = mb;
|
||||||
if (piCompareBinary(&prev_me, &me, sizeof(me)))
|
if (piCompareBinary(&prev_me, &me, sizeof(me)))
|
||||||
|
|||||||
@@ -13,12 +13,13 @@ PIBaseTransfer::PIBaseTransfer(): crc(standardCRC_16()), diag(false) {
|
|||||||
break_ = true;
|
break_ = true;
|
||||||
bytes_all = bytes_cur = 0;
|
bytes_all = bytes_cur = 0;
|
||||||
send_queue = 0;
|
send_queue = 0;
|
||||||
|
send_up = 0;
|
||||||
timeout_ = 10.;
|
timeout_ = 10.;
|
||||||
diag.setDisconnectTimeout(timeout_ / 10);
|
diag.setDisconnectTimeout(timeout_ / 10);
|
||||||
//CONNECTU(&diag, qualityChanged, this, diagChanged);
|
//CONNECTU(&diag, qualityChanged, this, diagChanged);
|
||||||
diag.setName("PIBaseTransfer");
|
diag.setName("PIBaseTransfer");
|
||||||
diag.start(50);
|
diag.start(50);
|
||||||
packets_count = 100;
|
packets_count = 10;
|
||||||
setPacketSize(4096);
|
setPacketSize(4096);
|
||||||
randomize();
|
randomize();
|
||||||
}
|
}
|
||||||
@@ -112,9 +113,25 @@ void PIBaseTransfer::received(PIByteArray data) {
|
|||||||
}
|
}
|
||||||
if (is_sending) {
|
if (is_sending) {
|
||||||
mutex_session.lock();
|
mutex_session.lock();
|
||||||
if (h.id < replies.size())
|
if (h.id < replies.size()) {
|
||||||
replies[h.id] = pt;
|
replies[h.id] = pt;
|
||||||
else
|
pm_string[h.id] = pt == pt_ReplySuccess ? '#' : '-';
|
||||||
|
int s = pm_string.find('+'), s1 = send_queue;
|
||||||
|
while (s <= (int)h.id && s > 0) {
|
||||||
|
send_queue--;
|
||||||
|
if (s >= 0) pm_string[s] = '-';
|
||||||
|
send_up = 0;
|
||||||
|
if (send_queue < 0) {
|
||||||
|
send_queue = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
s = pm_string.find('+');
|
||||||
|
}
|
||||||
|
if (s1-send_queue > 1 && packets_count > 2) packets_count-= piMaxi(packets_count/10,1);
|
||||||
|
if (s1 == send_queue && s1 < piMaxi(packets_count/2, 2) && packets_count < 100) send_up++;
|
||||||
|
if (send_up > 20 && send_up > packets_count*2) packets_count+= piMaxi(packets_count/10,1);
|
||||||
|
//piCoutObj << packets_count;
|
||||||
|
} else
|
||||||
piCoutObj << "invalid reply id";
|
piCoutObj << "invalid reply id";
|
||||||
mutex_session.unlock();
|
mutex_session.unlock();
|
||||||
// piCoutObj << "Done Packet" << h.id;
|
// piCoutObj << "Done Packet" << h.id;
|
||||||
@@ -182,11 +199,13 @@ void PIBaseTransfer::received(PIByteArray data) {
|
|||||||
bytes_all = sr.size;
|
bytes_all = sr.size;
|
||||||
header.session_id = h.session_id;
|
header.session_id = h.session_id;
|
||||||
header.id = 0;
|
header.id = 0;
|
||||||
|
packets_count = 10;
|
||||||
session.clear();
|
session.clear();
|
||||||
replies.clear();
|
replies.clear();
|
||||||
session.resize(sr.packets);
|
session.resize(sr.packets);
|
||||||
replies.resize(sr.packets + 1);
|
replies.resize(sr.packets + 1);
|
||||||
replies.fill(pt_Unknown);
|
replies.fill(pt_Unknown);
|
||||||
|
pm_string.resize(replies.size(), '-');
|
||||||
diag.reset();
|
diag.reset();
|
||||||
// diag.start(100);
|
// diag.start(100);
|
||||||
//piCoutObj << "receiveStarted()";
|
//piCoutObj << "receiveStarted()";
|
||||||
@@ -198,6 +217,7 @@ void PIBaseTransfer::received(PIByteArray data) {
|
|||||||
receiveStarted();
|
receiveStarted();
|
||||||
state_string = "receiving";
|
state_string = "receiving";
|
||||||
replies[0] = pt_ReplySuccess;
|
replies[0] = pt_ReplySuccess;
|
||||||
|
pm_string[0] = '#';
|
||||||
mutex_session.unlock();
|
mutex_session.unlock();
|
||||||
sendReply(pt_ReplySuccess);
|
sendReply(pt_ReplySuccess);
|
||||||
mutex_header.unlock();
|
mutex_header.unlock();
|
||||||
@@ -240,6 +260,7 @@ bool PIBaseTransfer::send_process() {
|
|||||||
int session_size = session.size();
|
int session_size = session.size();
|
||||||
replies.resize(session_size + 1);
|
replies.resize(session_size + 1);
|
||||||
replies.fill(pt_Unknown);
|
replies.fill(pt_Unknown);
|
||||||
|
pm_string.resize(replies.size(), '-');
|
||||||
mutex_session.unlock();
|
mutex_session.unlock();
|
||||||
PIByteArray ba;
|
PIByteArray ba;
|
||||||
if (!getStartRequest()) return finish_send(false);
|
if (!getStartRequest()) return finish_send(false);
|
||||||
@@ -247,6 +268,7 @@ bool PIBaseTransfer::send_process() {
|
|||||||
PITimeMeasurer stm;
|
PITimeMeasurer stm;
|
||||||
mutex_send.lock();
|
mutex_send.lock();
|
||||||
send_queue = 0;
|
send_queue = 0;
|
||||||
|
send_up = 0;
|
||||||
send_tm.reset();
|
send_tm.reset();
|
||||||
mutex_send.unlock();
|
mutex_send.unlock();
|
||||||
//int ltm = 0;
|
//int ltm = 0;
|
||||||
@@ -272,8 +294,10 @@ bool PIBaseTransfer::send_process() {
|
|||||||
mutex_send.unlock();
|
mutex_send.unlock();
|
||||||
return finish_send(false);
|
return finish_send(false);
|
||||||
}
|
}
|
||||||
if (stm.elapsed_s() > timeout_ / 10.) {
|
if (stm.elapsed_s() > timeout_ / 2.) {
|
||||||
|
send_up = 0;
|
||||||
send_queue = 0;
|
send_queue = 0;
|
||||||
|
pm_string.replaceAll("+", "-");
|
||||||
}
|
}
|
||||||
mutex_send.unlock();
|
mutex_send.unlock();
|
||||||
continue;
|
continue;
|
||||||
@@ -282,26 +306,28 @@ bool PIBaseTransfer::send_process() {
|
|||||||
ba = build_packet(i);
|
ba = build_packet(i);
|
||||||
diag.sended(ba.size_s());
|
diag.sended(ba.size_s());
|
||||||
sendRequest(ba);
|
sendRequest(ba);
|
||||||
|
pm_string[i+1] = '+';
|
||||||
mutex_send.lock();
|
mutex_send.lock();
|
||||||
send_queue++;
|
send_queue++;
|
||||||
mutex_send.unlock();
|
mutex_send.unlock();
|
||||||
if (break_) return finish_send(false);
|
if (break_) return finish_send(false);
|
||||||
}
|
}
|
||||||
// piCoutObj << "send done, checking";
|
// piCoutObj << "send done, checking";
|
||||||
PITimeMeasurer tm;
|
PITimeMeasurer rtm;
|
||||||
int prev_chk = 0;
|
int prev_chk = 0;
|
||||||
mutex_send.lock();
|
mutex_send.lock();
|
||||||
send_queue = 0;
|
send_queue = 0;
|
||||||
mutex_send.unlock();
|
mutex_send.unlock();
|
||||||
piMSleep(10);
|
piMSleep(10);
|
||||||
while (tm.elapsed_s() < timeout_) {
|
state_string = "sending+";
|
||||||
|
while (rtm.elapsed_s() < timeout_) {
|
||||||
//piCoutObj << "recovering...";
|
//piCoutObj << "recovering...";
|
||||||
mutex_session.lock();
|
mutex_session.lock();
|
||||||
int chk = checkSession();
|
int chk = checkSession();
|
||||||
mutex_session.unlock();
|
mutex_session.unlock();
|
||||||
if (chk == 0) return finish_send(true);
|
if (chk == 0) return finish_send(true);
|
||||||
if (chk != prev_chk) tm.reset();
|
if (chk != prev_chk) rtm.reset();
|
||||||
else if (tm.elapsed_m() < 100) {
|
else if (rtm.elapsed_m() < 100) {
|
||||||
piMSleep(1);
|
piMSleep(1);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -322,11 +348,15 @@ bool PIBaseTransfer::send_process() {
|
|||||||
mutex_send.unlock();
|
mutex_send.unlock();
|
||||||
if (sq >= packets_count) {
|
if (sq >= packets_count) {
|
||||||
piMSleep(10);
|
piMSleep(10);
|
||||||
|
send_queue = 0;
|
||||||
|
send_up = 0;
|
||||||
|
pm_string.replaceAll("+", "-");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ba = build_packet(chk - 1);
|
ba = build_packet(chk - 1);
|
||||||
diag.sended(ba.size_s());
|
diag.sended(ba.size_s());
|
||||||
sendRequest(ba);
|
sendRequest(ba);
|
||||||
|
pm_string[chk] = '+';
|
||||||
mutex_send.lock();
|
mutex_send.lock();
|
||||||
send_queue++;
|
send_queue++;
|
||||||
mutex_send.unlock();
|
mutex_send.unlock();
|
||||||
@@ -457,7 +487,8 @@ bool PIBaseTransfer::getStartRequest() {
|
|||||||
mutex_session.lock();
|
mutex_session.lock();
|
||||||
if (replies[0] == pt_ReplySuccess) {
|
if (replies[0] == pt_ReplySuccess) {
|
||||||
state_string = "send permited!";
|
state_string = "send permited!";
|
||||||
//piCoutObj << "ping " << tm.elapsed_m();
|
//packets_count = piClampi(10 / tm.elapsed_m(), 2, 100);
|
||||||
|
//piCoutObj << "ping " << tm.elapsed_m() << packets_count;
|
||||||
mutex_session.unlock();
|
mutex_session.unlock();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -474,6 +505,7 @@ void PIBaseTransfer::processData(int id, PIByteArray & data) {
|
|||||||
if (!session[id - 1].isEmpty()) {
|
if (!session[id - 1].isEmpty()) {
|
||||||
header.id = id;
|
header.id = id;
|
||||||
replies[id] = pt_ReplySuccess;
|
replies[id] = pt_ReplySuccess;
|
||||||
|
pm_string[id] = '#';
|
||||||
sendReply(pt_ReplySuccess);
|
sendReply(pt_ReplySuccess);
|
||||||
if (replies[replies.size()-1] == pt_ReplySuccess)
|
if (replies[replies.size()-1] == pt_ReplySuccess)
|
||||||
if (checkSession() == 0) state_string = "receive ok";
|
if (checkSession() == 0) state_string = "receive ok";
|
||||||
@@ -500,6 +532,7 @@ void PIBaseTransfer::processData(int id, PIByteArray & data) {
|
|||||||
}
|
}
|
||||||
header.id = id;
|
header.id = id;
|
||||||
replies[id] = pt_ReplySuccess;
|
replies[id] = pt_ReplySuccess;
|
||||||
|
pm_string[id] = '#';
|
||||||
sendReply(pt_ReplySuccess);
|
sendReply(pt_ReplySuccess);
|
||||||
if (checkSession() == 0) state_string = "receive ok";
|
if (checkSession() == 0) state_string = "receive ok";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ public:
|
|||||||
bool isCRCEnabled() const {return crc_enabled;}
|
bool isCRCEnabled() const {return crc_enabled;}
|
||||||
|
|
||||||
PIString stateString() const {return state_string;}
|
PIString stateString() const {return state_string;}
|
||||||
|
PIString packetMap() const {return pm_string;}
|
||||||
llong bytesAll() const {return bytes_all;}
|
llong bytesAll() const {return bytes_all;}
|
||||||
llong bytesCur() const {return bytes_cur;}
|
llong bytesCur() const {return bytes_cur;}
|
||||||
const PIDiagnostics &diagnostic() {return diag;}
|
const PIDiagnostics &diagnostic() {return diag;}
|
||||||
@@ -131,11 +132,13 @@ private:
|
|||||||
PacketHeader header;
|
PacketHeader header;
|
||||||
CRC_16 crc;
|
CRC_16 crc;
|
||||||
int send_queue;
|
int send_queue;
|
||||||
|
int send_up;
|
||||||
PIDiagnostics diag;
|
PIDiagnostics diag;
|
||||||
PIMutex mutex_session;
|
PIMutex mutex_session;
|
||||||
PIMutex mutex_send;
|
PIMutex mutex_send;
|
||||||
PIMutex mutex_header;
|
PIMutex mutex_header;
|
||||||
bool crc_enabled;
|
bool crc_enabled;
|
||||||
|
PIString pm_string;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline PIByteArray & operator <<(PIByteArray & s, const PIBaseTransfer::PacketHeader & v) {s << v.sig << v.type << v.session_id << v.id << v.crc; return s;}
|
inline PIByteArray & operator <<(PIByteArray & s, const PIBaseTransfer::PacketHeader & v) {s << v.sig << v.type << v.session_id << v.id << v.crc; return s;}
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
#include "pip.h"
|
#include "pip.h"
|
||||||
#include "pifiletransfer.h"
|
#include "pifiletransfer.h"
|
||||||
#include "pidatatransfer.h"
|
#include "pidatatransfer.h"
|
||||||
|
#include "piscreen.h"
|
||||||
|
#include "piscreentiles.h"
|
||||||
|
|
||||||
|
|
||||||
|
TileSimple pmt;
|
||||||
|
|
||||||
|
|
||||||
using namespace PICoutManipulators;
|
using namespace PICoutManipulators;
|
||||||
@@ -20,7 +25,7 @@ public:
|
|||||||
//testt.setTimeout(0.1);
|
//testt.setTimeout(0.1);
|
||||||
CONNECTU(&testt, sendRequest, this, ftsend);
|
CONNECTU(&testt, sendRequest, this, ftsend);
|
||||||
} else {
|
} else {
|
||||||
ft.setPacketSize(12800);
|
ft.setPacketSize(65000);
|
||||||
ft.setName("PIFT");
|
ft.setName("PIFT");
|
||||||
CONNECTU(&ft, sendRequest, this, ftsend);
|
CONNECTU(&ft, sendRequest, this, ftsend);
|
||||||
CONNECTU(&ft, sendFilesStarted, this, ftevent);
|
CONNECTU(&ft, sendFilesStarted, this, ftevent);
|
||||||
@@ -41,7 +46,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void startTest() {
|
void startTest() {
|
||||||
PIByteArray ba(1024*1024*256);
|
PIByteArray ba(1024*1024*8);
|
||||||
testt.send(ba);
|
testt.send(ba);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,13 +61,17 @@ private:
|
|||||||
void tick(void *, int) {
|
void tick(void *, int) {
|
||||||
if (ft.isStarted()) {
|
if (ft.isStarted()) {
|
||||||
ftevent();
|
ftevent();
|
||||||
|
updatePMT();
|
||||||
if (PIKbdListener::exiting) {
|
if (PIKbdListener::exiting) {
|
||||||
ft.stopSend();
|
ft.stopSend();
|
||||||
ft.stopReceive();
|
ft.stopReceive();
|
||||||
}
|
}
|
||||||
// piCout << (int)ft.diagnostic().quality();
|
// piCout << (int)ft.diagnostic().quality();
|
||||||
}
|
}
|
||||||
if (testt.isSending() || testt.isReceiving()) ftevent();
|
if (testt.isSending() || testt.isReceiving()) {
|
||||||
|
ftevent();
|
||||||
|
updatePMT();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EVENT_HANDLER(void, ftevent) {
|
EVENT_HANDLER(void, ftevent) {
|
||||||
@@ -119,6 +128,18 @@ private:
|
|||||||
}
|
}
|
||||||
ft.received(ba);
|
ft.received(ba);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void updatePMT() {
|
||||||
|
PIString pm;
|
||||||
|
if (test_) pm = testt.packetMap();
|
||||||
|
else pm = ft.packetMap();
|
||||||
|
int wd = 110;
|
||||||
|
pmt.content.resize(pm.size() / wd + 1);
|
||||||
|
for (int i=0; i<pmt.content.size_s(); i++) {
|
||||||
|
pmt.content[i].first = pm.mid(wd*i, piMini(pm.size() - i*wd, wd));
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -166,9 +187,14 @@ int main (int argc, char * argv[]) {
|
|||||||
src = cli.argumentValue("receive");
|
src = cli.argumentValue("receive");
|
||||||
dst = cli.argumentValue("send");
|
dst = cli.argumentValue("send");
|
||||||
}
|
}
|
||||||
|
PIScreen screen(false);
|
||||||
|
screen.enableExitCapture();
|
||||||
|
screen.rootTile()->addTile(new TilePICout());
|
||||||
|
screen.rootTile()->addTile(&pmt);
|
||||||
UDPFileTransfer tuf(src, dst, true);
|
UDPFileTransfer tuf(src, dst, true);
|
||||||
|
screen.start();
|
||||||
if (send_) tuf.startTest();
|
if (send_) tuf.startTest();
|
||||||
WAIT_FOREVER;
|
screen.waitForFinish();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if ((!cli.hasArgument("send") || !cli.hasArgument("receive")) || cli.hasArgument("help")) {
|
if ((!cli.hasArgument("send") || !cli.hasArgument("receive")) || cli.hasArgument("help")) {
|
||||||
@@ -184,8 +210,13 @@ int main (int argc, char * argv[]) {
|
|||||||
src += ":"+PIString::fromNumber(port);
|
src += ":"+PIString::fromNumber(port);
|
||||||
dst += ":"+PIString::fromNumber(port);
|
dst += ":"+PIString::fromNumber(port);
|
||||||
}
|
}
|
||||||
PIKbdListener kbd;
|
// PIKbdListener kbd;
|
||||||
kbd.enableExitCapture();
|
// kbd.enableExitCapture();
|
||||||
|
PIScreen screen(false);
|
||||||
|
screen.enableExitCapture();
|
||||||
|
screen.rootTile()->addTile(new TilePICout());
|
||||||
|
screen.rootTile()->addTile(&pmt);
|
||||||
|
screen.start();
|
||||||
UDPFileTransfer f(src, dst);
|
UDPFileTransfer f(src, dst);
|
||||||
if (cli.hasArgument("dir")) f.ft.setDirectory(cli.argumentValue("dir"));
|
if (cli.hasArgument("dir")) f.ft.setDirectory(cli.argumentValue("dir"));
|
||||||
if (cli.hasArgument("quet")) f.setQuet(true);
|
if (cli.hasArgument("quet")) f.setQuet(true);
|
||||||
@@ -199,9 +230,8 @@ int main (int argc, char * argv[]) {
|
|||||||
} else {
|
} else {
|
||||||
piCout << "wait for receiving";
|
piCout << "wait for receiving";
|
||||||
}
|
}
|
||||||
kbd.start();
|
|
||||||
WAIT_FOR_EXIT
|
|
||||||
PICout(0) << "\n";
|
PICout(0) << "\n";
|
||||||
|
screen.waitForFinish();
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user