migrate to async IO model
new PIIODevice::interrupt() virtual method new PIWaitEvent private class PIEthernet and PISerial basically tested on Windows and Linux
This commit is contained in:
110
main.cpp
110
main.cpp
@@ -79,6 +79,12 @@ public:
|
||||
Pipe pipe;
|
||||
};
|
||||
|
||||
PITimeMeasurer tm;
|
||||
void phase(const char * msg) {
|
||||
piCout << "";
|
||||
piCout << piRound(tm.elapsed_s() * 10) / 10. << "s" << msg;
|
||||
}
|
||||
|
||||
int main(int argc, char * argv[]) {
|
||||
piCout << "main";
|
||||
|
||||
@@ -109,53 +115,87 @@ int main(int argc, char * argv[]) {
|
||||
delete threads[i];
|
||||
}*/
|
||||
|
||||
PIEthernet eth(PIEthernet::UDP), seth(PIEthernet::TCP_Client);
|
||||
eth.connect("127.0.0.1", 50000);
|
||||
eth.startThreadedRead();
|
||||
//PIEthernet eth(PIEthernet::UDP), seth(PIEthernet::UDP);
|
||||
//eth.setReadAddress("127.0.0.1", 50000);
|
||||
//eth.startThreadedRead();
|
||||
//piCout << eth.open();
|
||||
|
||||
/*
|
||||
PIByteArray req = PIByteArray::fromHex("205e011000000000ef");
|
||||
PISerial ser;
|
||||
ser.setSpeed(PISerial::S9600);
|
||||
ser.setOption(PIIODevice::BlockingRead);
|
||||
piCout << ser.open("COM3");
|
||||
*/
|
||||
|
||||
/*
|
||||
ser.setOption(PIIODevice::BlockingRead, false);
|
||||
ser.setVTime(200);
|
||||
ser.open("COM3");
|
||||
CONNECTL(&ser, threadedReadEvent, ([](const uchar * data, ssize_t size){
|
||||
piCout << "*ser readed" << size;
|
||||
}));
|
||||
PIThread thread;
|
||||
thread.start([&](void*){
|
||||
piCout << "[T] start" << GetCurrentThreadId();
|
||||
//PIByteArray data = ((PIIODevice*)&ser)->read(1024);
|
||||
eth.connect("192.168.1.13", 23, false);
|
||||
piCout << "[T] connected" << eth.isConnected() << errorString();
|
||||
//piCout << "[T] readed" << data.size() << errorString();
|
||||
piCout << "[T] start";
|
||||
PIByteArray data = ((PIIODevice*)&ser)->read(1024);
|
||||
piCout << "[T] readed" << data.size();// << errorString();
|
||||
piCout << "[T] end";
|
||||
});
|
||||
piMSleep(500);
|
||||
//eth.close();
|
||||
//piMSleep(500);
|
||||
thread.stop();
|
||||
thread.interrupt();
|
||||
//seth.send("127.0.0.1", 50000, "string", 7);
|
||||
//thread.interrupt();
|
||||
thread.waitForFinish();
|
||||
*/
|
||||
}, 200);
|
||||
//ser.startThreadedRead();
|
||||
|
||||
piSleep(1);
|
||||
ser.write(req);
|
||||
phase("Send");
|
||||
|
||||
piSleep(2);
|
||||
phase("End");
|
||||
|
||||
/*
|
||||
eth.listen("127.0.0.1", 50000);
|
||||
seth.connect("127.0.0.1", 50001, false);
|
||||
PIEthernet eth(PIEthernet::TCP_Client), seth(PIEthernet::TCP_Server), * server_client = nullptr;
|
||||
|
||||
seth.listen("127.0.0.1", 50000, true);
|
||||
//seth.startThreadedRead();
|
||||
CONNECTL(&seth, newConnection, ([&server_client](PIEthernet * e){
|
||||
server_client = e;
|
||||
e->setName("TCP SC");
|
||||
piCout << "newConn" << e;
|
||||
CONNECTL(e, threadedReadEvent, ([](const uchar * data, ssize_t size){
|
||||
piCout << "*TCP SC* readed" << size;
|
||||
}));
|
||||
CONNECTL(e, disconnected, ([](bool error){
|
||||
piCout << "*TCP SC* disconnected" << error;
|
||||
}));
|
||||
e->startThreadedRead();
|
||||
}));
|
||||
|
||||
eth.setName("TCP CC");
|
||||
//eth.setParameter(PIEthernet::KeepConnection, false);
|
||||
CONNECTL(ð, connected, ([ð](){
|
||||
piCout << "*TCP CC* connected";
|
||||
eth.send("byte", 5);
|
||||
}));
|
||||
CONNECTL(ð, disconnected, ([](bool error){
|
||||
piCout << "*TCP CC* disconnected" << error;
|
||||
}));
|
||||
|
||||
piMSleep(500);
|
||||
piCout << "connected" << seth.isConnected();
|
||||
*/
|
||||
piMSleep(1000);
|
||||
piCout << "main stop ...";
|
||||
eth.stopThreadedRead();
|
||||
piCout << "main wait ..." << eth.isThreadedRead();
|
||||
eth.waitThreadedReadFinished();
|
||||
phase("Connect");
|
||||
eth.connect("127.0.0.1", 50000);
|
||||
eth.startThreadedRead();
|
||||
|
||||
piMSleep(500);
|
||||
phase("Send 5");
|
||||
piCout << "c-ing" << eth.isConnecting();
|
||||
piCout << "c- ed" << eth.isConnected();
|
||||
eth.send("byte", 5);
|
||||
|
||||
piMSleep(500);
|
||||
phase("Send 6");
|
||||
eth.send("bytes", 6);
|
||||
|
||||
piMSleep(500);
|
||||
phase("Disconnect");
|
||||
if (server_client)
|
||||
server_client->close();
|
||||
//eth.close();
|
||||
piCout << "main end" << eth.isThreadedRead();
|
||||
|
||||
//ser.close();
|
||||
piMSleep(500);
|
||||
phase("END");
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user