Skip to content

Commit

Permalink
serv/client pre init;
Browse files Browse the repository at this point in the history
  • Loading branch information
wipedlife committed Jul 28, 2021
1 parent 7f4ba83 commit 1f9f1a3
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 11 deletions.
29 changes: 27 additions & 2 deletions src/async_serv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,11 @@ static opcode::opcode opcodes[] = {
{{'a', 'b', 'c', 'd'}, opcode::events::event1},
};
namespace serv {
struct user {
struct user {// for udp; todo: change.
std::string ip;
uint16_t port;
struct sockaddr_in in;
time_t lastPing;
bool operator==(struct sockaddr_in &s) {
return s.sin_family == in.sin_family && s.sin_port == in.sin_port &&
s.sin_addr.s_addr == in.sin_addr.s_addr;
Expand All @@ -34,7 +35,9 @@ struct user {
in.sin_family = s.sin_family;
in.sin_port = s.sin_port;
in.sin_addr.s_addr = s.sin_addr.s_addr;
updatePing();
}
void updatePing(void){ lastPing = time(NULL); }
};
} // namespace serv

Expand Down Expand Up @@ -155,14 +158,36 @@ void serv_thread(struct serv_arguments * arguments) {

bool user_exists = false;
std::stringstream list;
time_t timenow = time(NULL);

auto delByPing = [&timenow](){
auto deleted = false;
do{
deleted = false;
for( auto it = users.begin(); it != users.end(); it++ ){
serv::user & u = *it;
if(timenow - u.lastPing > 120) {
puts("Erase user(timeout): ");
std::cout << u.ip << std::endl;
users.erase(it);
deleted = true;
break;
}
}
}while(deleted);
};

delByPing();

for (auto u : users) {
// TODO: ping-pong time(NULL) ...500ms -> users.erase(usr);
if (u == client_addr) {
puts("User exists already");
user_exists = true;
// break;
u.updatePing();
}
list << u.ip << ":" << u.port << ";";

}

if (!user_exists) {
Expand Down
39 changes: 33 additions & 6 deletions src/client/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ struct sock_data {
socklen_t m_adr_l;
int *m_sock_tcp, *m_sock_udp;

time_t lastPing;

peer_pair_t m_peer_info;

sock_data(struct sockaddr_in adr, socklen_t adr_l, int *sock_tcp,
Expand Down Expand Up @@ -157,6 +159,20 @@ struct serv_data {
}
m_sock_udp = m_udp_self;
}
void delByPing(int s){
time_t timenow = time(NULL);
bool erased=false;
do{
erased=false;
for (auto it = users_map.begin(); it != users_map.end(); it++) {
if( timenow - it->second.lastPing > s ){
users_map.erase(it);
erased = true;
break;
}
}
}while(erased);
}
void getUsers(void) {
try {
write("getuserlist\n");
Expand All @@ -181,6 +197,7 @@ struct serv_data {
n_data.set_timeout(1, 0);
auto r = n_data.read().first;
if (r.size()) {
n_data.lastPing = time(NULL);
users_map[{ip, atoi(port.c_str())}] = n_data;
// puts("New connection");
// sleep(35);//TODELETE
Expand All @@ -199,14 +216,19 @@ struct serv_data {
users_map[r.second.m_peer_info] = r.second;
// puts("New connection");
// sleep(35);//TODELETE
}
}
users_map[r.second.m_peer_info].lastPing=time(NULL);

std::cout << "Users count: " << users_map.size() - 1 << std::endl;
if (users_map.size() - 1 > 2) {
std::cout << "Test passed!" << std::endl;
m_data.write("abcd\n", true);
m_data.write("abcd\n3.14zda\n", true);
auto b = m_data.read(1024, true);
std::cout << "TCP RET:" << b.first << std::endl;
m_data.write("example\n", true);
auto c = m_data.read(1024, true);
std::cout << "TCP RET:" << c.first << std::endl;

sleep(1000);
}
} catch (std::exception &e) {
Expand Down Expand Up @@ -280,13 +302,18 @@ int main(int argc, char **argv) {
gtk_main();
}
*/

if (argc != 3)
stop_program("%s host port\n", argv[0]);
serv_data sdata(argv[1], atoi(argv[2]));
std::string host{"127.0.0.1"};
uint16_t port = 3245;
if (argc == 3){
//stop_program("%s host port\n", argv[0]);
host = argv[1];
port = atoi(argv[2]);
}
serv_data sdata(host, port);
sdata.self_bind();
while (1) {
sdata.getUsers();
sdata.delByPing(5);
sleep(1);
}
}
4 changes: 2 additions & 2 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ static std::string initLuaFile{"./luasubmodules/init.lua"};

static void usage(char *const program) {
puts(PROGRAM_INFO);
auto printoption = [&program](const char *longopt, char opt = ' ',
std::string desc) {
auto printoption = [&program](const char *longopt, char opt,
std::string desc="no description") {
printf("--%s -%c\t=> %s\n", longopt, opt, desc.c_str());
};
printf("\nUSAGE: %s [options]\n", program);
Expand Down
2 changes: 1 addition & 1 deletion src/x25519.dat
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
-----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VuBCIEIIDxPBmT3Ux+Z7DoQnaO3sD1yQffkkVLwILSeIO6Bv5i
MC4CAQAwBQYDK2VuBCIEIACrQb4xfexwcYnKyZuAnLa7GrLbCZfxCZZppur8aSF9
-----END PRIVATE KEY-----

0 comments on commit 1f9f1a3

Please sign in to comment.