tinyrpc/test/reactortest/main.cc

80 lines
1.9 KiB
C++
Raw Permalink Normal View History

2024-12-25 19:40:27 +08:00
#include "coroutine_hook.hpp"
2024-12-20 21:17:21 +08:00
#include "reactor.hpp"
#include "fd_event.hpp"
#include "logger.hpp"
2024-12-25 19:40:27 +08:00
#include "net_address.hpp"
2024-12-20 21:17:21 +08:00
#include <cstring>
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <thread>
using namespace tinyrpc;
using namespace std;
Reactor reactor;
int main() {
int listenfd = socket(AF_INET, SOCK_STREAM, 0);
2024-12-25 19:40:27 +08:00
NetAddress na(9001);
logger() << na.toString();
int ret = bind(listenfd, na.getSockaddr(), na.getSockLen());
2024-12-20 21:17:21 +08:00
if(ret == -1) {
logger() << "bind ret -1 err:" << strerror(errno);
return -1;
}
listen(listenfd, 5);
FdEvent fe(listenfd);
fe.addListenEvent(IOEvent::READ);
fe.setReadCallback([listenfd] {
thread t([listenfd]{
sockaddr_in addr;
socklen_t len = sizeof addr;
int fd = accept(listenfd,(sockaddr*)(&addr), &len);
2024-12-25 19:40:27 +08:00
NetAddress na(&addr);
2024-12-20 21:17:21 +08:00
FdEvent* cli = new FdEvent(fd);
cli->addListenEvent(IOEvent::READ);
cli->setNonblock();
cli->setReadCallback([fd, cli] {
char buf[64]{};
int ret = read(fd, buf, 64);
if(ret == 0) {
2024-12-25 19:40:27 +08:00
2024-12-20 21:17:21 +08:00
reactor.delFdEvent(cli);
2024-12-25 19:40:27 +08:00
close(fd);
2024-12-20 21:17:21 +08:00
return;
}
cout << buf << endl;
write(fd, buf, ret);
});
logger() << "addFdEvent" << cli->getFd();
reactor.addFdEvent(cli);
}
);
t.join();
});
cout << "listenfd" << listenfd << endl;
reactor.addFdEvent(&fe);
reactor.loop();
2024-12-25 19:40:27 +08:00
2024-12-20 21:17:21 +08:00
close(listenfd);
2024-12-25 19:40:27 +08:00
// enableHook();
// Reactor* reactor = Reactor::getReactor();
// char buf[128];
// read(0, buf, 128);
// reactor->loop();
2024-12-20 21:17:21 +08:00
}