Skip to content

Commit

Permalink
client works
Browse files Browse the repository at this point in the history
  • Loading branch information
wangyu- committed Jun 1, 2018
1 parent d244edd commit 1c9c5f1
Show file tree
Hide file tree
Showing 9 changed files with 494 additions and 304 deletions.
2 changes: 1 addition & 1 deletion common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -587,7 +587,7 @@ int new_listen_socket(int &fd,u32_t ip,int port)
setnonblocking(fd);
set_buf_size(fd,socket_buf_size);

mylog(log_debug,"local_listen_fd=%d\n,",fd);
mylog(log_debug,"local_listen_fd=%d\n",fd);

return 0;
}
Expand Down
8 changes: 7 additions & 1 deletion connection.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,10 +106,16 @@ struct conn_info_t //stores info for a raw connection.for client ,there is o
conv_manager_t conv_manager;
fec_encode_manager_t fec_encode_manager;
fec_decode_manager_t fec_decode_manager;
my_timer_t timer;
ev_timer timer;
//my_timer_t timer;
//ip_port_t ip_port;
u64_t last_active_time;
stat_t stat;

int local_listen_fd;
int remote_fd;
fd64_t remote_fd64;

conn_info_t()
{
}
Expand Down
40 changes: 26 additions & 14 deletions delay_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,27 +18,29 @@ delay_manager_t::delay_manager_t()
{
capacity=0;

if ((timer_fd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK)) < 0)
{
mylog(log_fatal,"timer_fd create error");
myexit(1);
}
//if ((timer_fd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK)) < 0)
//{
// mylog(log_fatal,"timer_fd create error");
// myexit(1);
//}

itimerspec zero_its;
memset(&zero_its, 0, sizeof(zero_its));
//itimerspec zero_its;
//memset(&zero_its, 0, sizeof(zero_its));

timerfd_settime(timer_fd, TFD_TIMER_ABSTIME, &zero_its, 0);
//timerfd_settime(timer_fd, TFD_TIMER_ABSTIME, &zero_its, 0);

}
delay_manager_t::~delay_manager_t()
{
//TODO ,we currently dont need to deconstruct it
}

/*
int delay_manager_t::get_timer_fd()
{
return timer_fd;
}
}*/

//int add(my_time_t delay,const dest_t &dest,const char *data,int len);
int delay_manager_t::add(my_time_t delay,const dest_t &dest,char *data,int len)
{
Expand Down Expand Up @@ -78,6 +80,8 @@ int delay_manager_t::add(my_time_t delay,const dest_t &dest,char *data,int len)

delay_mp.insert(make_pair(tmp_time,tmp));

////check(); check everytime when add, is it better ??

return 0;
}

Expand Down Expand Up @@ -112,11 +116,19 @@ int delay_manager_t::check()
}
if(!delay_mp.empty())
{
itimerspec its;
memset(&its.it_interval,0,sizeof(its.it_interval));
its.it_value.tv_sec=delay_mp.begin()->first/1000000llu;
its.it_value.tv_nsec=(delay_mp.begin()->first%1000000llu)*1000llu;
timerfd_settime(timer_fd,TFD_TIMER_ABSTIME,&its,0);
//itimerspec its;
//memset(&its.it_interval,0,sizeof(its.it_interval));
//its.it_value.tv_sec=delay_mp.begin()->first/1000000llu;
//its.it_value.tv_nsec=(delay_mp.begin()->first%1000000llu)*1000llu;
//timerfd_settime(timer_fd,TFD_TIMER_ABSTIME,&its,0);

ev_timer_stop(loop, &timer);
ev_timer_set(&timer, delay_mp.begin()->first /1000000.0 - ev_now(loop),0 ); //we should use ev_now here.
ev_timer_start(loop, &timer);
}
else
{
ev_timer_stop(loop, &timer); //not necessary
}
}
return 0;
Expand Down
20 changes: 16 additions & 4 deletions delay_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ union dest_t
u64_t u64;
};
*/

/*
struct my_timer_t
{
int timer_fd;
Expand Down Expand Up @@ -101,7 +101,9 @@ struct my_timer_t
timerfd_settime(timer_fd,TFD_TIMER_ABSTIME,&its,0);
return 0;
}
};
};*/


struct delay_data_t
{
dest_t dest;
Expand All @@ -113,17 +115,27 @@ struct delay_data_t

struct delay_manager_t
{
int timer_fd;
ev_timer timer;
struct ev_loop *loop=0;
void (*cb) (struct ev_loop *loop, struct ev_timer *watcher, int revents)=0;

//int timer_fd;
int capacity;
multimap<my_time_t,delay_data_t> delay_mp; //unit us,1 us=0.001ms
delay_manager_t();
delay_manager_t(delay_manager_t &b)
{
assert(0==1);
}
void set_loop_and_cb(struct ev_loop *loop,void (*cb) (struct ev_loop *loop, struct ev_timer *watcher, int revents))
{
this->loop=loop;
this->cb=cb;
ev_init(&timer,cb);
}
int set_capacity(int a){capacity=a;return 0;}
~delay_manager_t();
int get_timer_fd();
ev_timer& get_timer();
int check();
int add(my_time_t delay,const dest_t &dest,char *data,int len);
};
Expand Down
23 changes: 18 additions & 5 deletions fec_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -130,21 +130,27 @@ int blob_decode_t::output(int &n,char ** &s_arr,int *&len_arr)

fec_encode_manager_t::~fec_encode_manager_t()
{
fd_manager.fd64_close(timer_fd64);
clear();
//fd_manager.fd64_close(timer_fd64);
}
/*
u64_t fec_encode_manager_t::get_timer_fd64()
{
return timer_fd64;
}
}*/

fec_encode_manager_t::fec_encode_manager_t()
{
//int timer_fd;

/*
if ((timer_fd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK)) < 0)
{
mylog(log_fatal,"timer_fd create error");
myexit(1);
}
timer_fd64=fd_manager.create(timer_fd);
timer_fd64=fd_manager.create(timer_fd);*/


reset_fec_parameter(g_fec_data_num,g_fec_redundant_num,g_fec_mtu,g_fec_queue_len,g_fec_timeout,g_fec_mode);

Expand Down Expand Up @@ -175,7 +181,13 @@ int fec_encode_manager_t::append(char *s,int len/*,int &is_first_packet*/)
my_time_t tmp_time=fec_timeout+first_packet_time;
its.it_value.tv_sec=tmp_time/1000000llu;
its.it_value.tv_nsec=(tmp_time%1000000llu)*1000llu;
timerfd_settime(timer_fd,TFD_TIMER_ABSTIME,&its,0);
//timerfd_settime(timer_fd,TFD_TIMER_ABSTIME,&its,0);

ev_timer_stop(loop, &timer);
ev_timer_set(&timer, tmp_time/1000000.0 - ev_now(loop) ,0 ); //we should use ev_now here.
ev_timer_start(loop, &timer);

//ev_timer_set(loop,)
}
if(fec_mode==0)//for type 0 use blob
{
Expand Down Expand Up @@ -402,7 +414,8 @@ int fec_encode_manager_t::input(char *s,int len/*,int &is_first_packet*/)

itimerspec its;
memset(&its,0,sizeof(its));
timerfd_settime(timer_fd,TFD_TIMER_ABSTIME,&its,0);
ev_timer_stop(loop, &timer);
//timerfd_settime(timer_fd,TFD_TIMER_ABSTIME,&its,0);

if(encode_fast_send&&fec_mode==1)
{
Expand Down
38 changes: 30 additions & 8 deletions fec_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ struct blob_decode_t

class fec_encode_manager_t
{

private:
u32_t seq;

Expand All @@ -133,30 +134,51 @@ class fec_encode_manager_t
int output_len[max_fec_packet_num+100];

int counter;
int timer_fd;
u64_t timer_fd64;
//int timer_fd;
//u64_t timer_fd64;

int ready_for_output;
u32_t output_n;


int append(char *s,int len);

ev_timer timer;
struct ev_loop *loop=0;
void (*cb) (struct ev_loop *loop, struct ev_timer *watcher, int revents)=0;

public:
fec_encode_manager_t();
~fec_encode_manager_t();

void set_data(void * data)
{
timer.data=data;
}


void set_loop_and_cb(struct ev_loop *loop,void (*cb) (struct ev_loop *loop, struct ev_timer *watcher, int revents))
{
this->loop=loop;
this->cb=cb;
ev_init(&timer,cb);
}

int clear()
{
counter=0;
blob_encode.clear();
ready_for_output=0;

itimerspec zero_its;
memset(&zero_its, 0, sizeof(zero_its));

timerfd_settime(timer_fd, TFD_TIMER_ABSTIME, &zero_its, 0);
//itimerspec zero_its;
//memset(&zero_its, 0, sizeof(zero_its));
//timerfd_settime(timer_fd, TFD_TIMER_ABSTIME, &zero_its, 0);

if(loop)
{
ev_timer_stop(loop,&timer);
loop=0;
cb=0;
}
seq=(u32_t)get_true_random_number(); //TODO temp solution for a bug.

return 0;
Expand All @@ -176,7 +198,7 @@ class fec_encode_manager_t
{
return fec_mode;
}
u64_t get_timer_fd64();
//u64_t get_timer_fd64();
int reset_fec_parameter(int data_num,int redundant_num,int mtu,int pending_num,int pending_time,int type);
int input(char *s,int len/*,int &is_first_packet*/);
int output(int &n,char ** &s_arr,int *&len);
Expand Down
1 change: 1 addition & 0 deletions my_ev_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@

#define EV_STANDALONE 1
#define EV_COMMON void *data; unsigned long long u64;
#define EV_COMPAT3 0
//#define EV_VERIFY 2
Loading

0 comments on commit 1c9c5f1

Please sign in to comment.