void start_services () { init_services (); bzero (&user_list_head, sizeof (struct socket_list)); bzero (rooms, sizeof (rooms)); int i; for (i = 0; i < MAXROOM; i++) rooms[i].index = i; printf ("running services...\n"); struct epoll_event events[MAXEVENTS]; int nfds; while (1) { nfds = epoll_wait (epoll_fd, events, MAXEVENTS, -1); if (nfds == -1) { perror ("epoll_wait"); continue; } for (i = 0; i < nfds; ++i) { if (events[i].data.fd == listen_socket) on_accept (); else on_receive (events[i].data.fd); } } }
void udp_server::poll (uint16_t milliseconds) { ENetEvent ev; auto result (enet_host_service(sv_, &ev, milliseconds)); if (result < 0) throw std::runtime_error((format("network error %1%") % -result).str()); switch (ev.type) { case ENET_EVENT_TYPE_CONNECT: on_connect(ev.peer); break; case ENET_EVENT_TYPE_RECEIVE: on_receive(ev.peer, packet(ev.packet->data, ev.packet->dataLength)); enet_packet_destroy(ev.packet); break; case ENET_EVENT_TYPE_DISCONNECT: on_disconnect(ev.peer); break; case ENET_EVENT_TYPE_NONE: break; } }
/* Sends the XML data to server */ static int send_ui_frontend_data(char *xmldata) { int sockfd = INVALID_SOCKET; int ret = 0; sockfd = connect_to_server(VISUALIZATION_SERVER_PORT, VISUALIZATION_SERVER_ADDRESS); if (sockfd != INVALID_SOCKET) { ret = add_length_and_send_data(sockfd, xmldata, strlen(xmldata)); if (ret != INVALID_SOCKET) { vis_rdata = NULL; ret = on_receive(sockfd, &vis_rdata); if (ret <= 0) { VIS_DEBUG("Failed to recieve data\n"); } } else { VIS_DEBUG("Failed to send XML data = %s\n", xmldata); } } else { VIS_DEBUG("Failed to Connect to server : %s Port : %d\n", VISUALIZATION_SERVER_ADDRESS, VISUALIZATION_SERVER_PORT); } close_socket(&sockfd); return ret; }
/// 解析回调 void on_parse(error_code const& ec, packet_head_type* ph, char const* data, std::size_t size) { if (opts_->mlpe_ == mlpe::mlp_derived || opts_->mlpe_ == mlpe::mlp_both) on_receive(ec, ph, data, size); if (opts_->mlpe_ == mlpe::mlp_callback || opts_->mlpe_ == mlpe::mlp_both) if (global_receiver_) global_receiver_(ec, ph, data, size); }
// ========================================================================== // HANDLE_SUBNEGOTIATION // ========================================================================== std::vector<telnetpp::token> client::handle_subnegotiation( u8stream const &content) { auto result = detail::decode(content); if (result.empty()) { return {}; } return on_receive(result); }
int main(int argc, char *argv[]) { init_enet_server(PORT); LOG("Started server.\n"); struct moag moag; init_game(&moag); LOG("Initialized game.\n"); ENetEvent event; for (;;) { while (enet_host_service(get_server_host(), &event, 0)) { switch (event.type) { case ENET_EVENT_TYPE_CONNECT: LOG("Client connected.\n"); event.peer->data = (void *)client_connect(&moag); break; case ENET_EVENT_TYPE_DISCONNECT: LOG("Client disconnected.\n"); disconnect_client(&moag, (intptr_t)event.peer->data); break; case ENET_EVENT_TYPE_RECEIVE: on_receive(&moag, &event); enet_packet_destroy(event.packet); break; default: break; } } SDL_Delay(10); step_game(&moag); } uninit_enet(); LOG("Stopped server.\n"); return EXIT_SUCCESS; }
void* receive_thread (void *arg) { g_print ("running receive thread...\n"); struct epoll_event events[MAXEVENTS]; int nfd,i; while (1) { nfd = epoll_wait (epoll_fd, events, MAXEVENTS, -1); if (nfd == -1 ) { perror ("epoll_wait"); continue; } for (i=0;i<nfd;i++) { on_receive (events[i].data.fd); } } }
int main(void) { printf("\n\r\n\rConnecting .."); if ((fd=socket(AF_INET, SOCK_DGRAM, 0))==-1) printf("socket created\n"); memset((char *)&myaddr, 0, sizeof(myaddr)); myaddr.sin_family = AF_INET; myaddr.sin_addr.s_addr = htonl(INADDR_ANY); if(stun_client(&we)) { myaddr.sin_port = htons(we.publicPORT); if (bind(fd, (struct sockaddr *)&myaddr, sizeof(myaddr)) < 0) { perror("bind failed"); return 0; } on_receive(); } close(fd); return 0; }
/* * [ application_name local_ip local_port cname sdp_file [-t trace_file] ] */ int main(int argc, char **argv){ /* create a rtp session, we will assign unique value to identify */ err = rtp_create(&sid); if (err) { err_handle(err); } sdp_parse(sid, argv); /* parse the sdp file */ /* The application will sleep "rtp_start_time" time if "rtp_start_time" > 0 when the application is start. * * NOTE! This is not the same with Start Time in NCTUns * EX: if the Start Time in NCTUn is 5, and rtp_start_time is 3, * then the real time to startup the applicaion is 8. */ if (rtp_start_time > 0) usleep( ((int) rtp_start_time * 1000000) ); initial_session(argc, argv, sid); /* set local receive addr, CNAME, and startup the connectoin */ if (is_audio) /* media type is audio */ delay = (ms_pkt / 1000.); else delay = (1. / framerate); err = rtp_get_sour_rtpsocket(sid, &rtp_sockt); /* get source rtp socket */ if (err) err_handle(err); err = rtp_get_sour_rtcpsocket(sid, &rtcp_sockt); /* get source rtcp socket */ if (err) err_handle(err); if (rtp_sockt > nfds || rtcp_sockt > nfds) { if (rtp_sockt > rtcp_sockt) nfds = rtp_sockt; else nfds = rtcp_sockt; } FD_ZERO(&afds); FD_ZERO(&rfds); FD_SET(rtp_sockt, &afds); FD_SET(rtcp_sockt, &afds); gettimeofday(&start_tv, NULL); starttime = (start_tv.tv_sec + start_tv.tv_usec / 1000000.); now = starttime; rtp_interval = rtp_stop_time - rtp_start_time; /* bytes of each packet = ((bits/sample) / 8 ) * (clock rate) * ( each delay of packet in sec ) */ // packet_size = (int) ( (bits_per_sample / 8.) * sampling_rate * delay); while ((now - starttime) <= rtp_interval) { memcpy(&rfds, &afds, sizeof(rfds)); err = get_rtcp_timeout(sid, &timeout_tv); /* get the send_rtcp_packet time */ if (err) err_handle(err); if (time_expire(&timeout_tv, &now_tv)) { err = rtp_check_on_expire(); /* rtcp on_expire */ if (err) err_handle(err); err = get_rtcp_timeout(sid, &timeout_tv); /* get the send_rtcp_packet time */ if (err) err_handle(err); } nexttime_tv = double_to_timeval(timeval_to_double(timeout_tv) - now); if (select(nfds + 1, &rfds, (fd_set *)0, (fd_set *)0, &nexttime_tv) < 0) { if (errno == EINTR) continue; else { printf("nexttime_tv.tv_sec = %ld\n", nexttime_tv.tv_sec); printf("nexttime_tv.tv_usec = %ld\n", nexttime_tv.tv_usec); printf("select error: %d\n", errno); } } if (FD_ISSET(rtp_sockt, &rfds)) { err = on_receive(sid, rtp_sockt, recvbuf, &recbuflen); if (err) err_handle(err); } else if (FD_ISSET(rtcp_sockt, &rfds)) { err = on_receive(sid, rtcp_sockt, recvbuf, &recbuflen); if (err) err_handle(err); } gettimeofday(&now_tv, NULL); now = (now_tv.tv_sec + now_tv.tv_usec / 1000000.); } // while ((now - starttime) <= rtp_interval) err = rtp_close_connection(sid, reason); if (err) { err_handle(err); } err = rtp_delete(sid); if (err) { err_handle(err); } return 0; }
int main(int argc, char **argv){ /* setting commad line information */ local_ip = argv[1]; local_port = atoi(argv[2]); cname = argv[3]; proto = udp; /* create a rtp session, we will assign unique value to identify */ err = rtp_create(&sid); if (err) { err_handle(err); } sdp_parse(sid, argv); if (rtp_start_time > 0) { usleep( ((int) rtp_start_time * 1000000) ); } if ((i = initial_session(argc, argv, sid))) { printf("WARNING : initial_session warning = %d\n", i); } else { printf("initial_session is ok\n"); } if (is_audio) { delay = (ms_pkt / 1000.); } else { delay = (1. / framerate); // unit: ms/sec. we assume that 300 samples/frame, } /* bytes of each packet = ((bits/sample) / 8 ) * (clock rate) * ( each delay of packet in sec ) */ packet_size = (int) ( bits_per_sample * sampling_rate * delay / 8.); /* original_bw = min_bw = 50, so we use the same pkt size */ minbw_pktsize = packet_size; printf("bits_per_sample = %lf, (bits_per_sample/8.) = %lf\n", bits_per_sample, (bits_per_sample/8.)); printf("sampling_rate = %lf\n", sampling_rate); printf("delay = %lf\n", delay); printf("packet_size = %d\n", packet_size); fflush(stdout); /* the bandwidth wa are using, 30 = frames/sec */ cur_bw = get_cur_bw(packet_size); err = rtp_get_sour_rtpsocket(sid, &rtp_sockt); if (err) { err_handle(err); } err = rtp_get_sour_rtcpsocket(sid, &rtcp_sockt); if (err) { err_handle(err); } if (rtp_sockt > nfds || rtcp_sockt > nfds) { if (rtp_sockt > rtcp_sockt) nfds = rtp_sockt; else nfds = rtcp_sockt; } FD_ZERO(&afds); FD_ZERO(&rfds); FD_SET(rtp_sockt, &afds); FD_SET(rtcp_sockt, &afds); gettimeofday(&start_tv, NULL); starttime = (start_tv.tv_sec + start_tv.tv_usec / 1000000.); nexttime = starttime; rtp_interval = rtp_stop_time - rtp_start_time; printf("rtp_interval = %f\n", rtp_interval); fflush(stdout); while (rtp_interval >= 0) { memcpy(&rfds, &afds, sizeof(rfds)); if (RTP_MAX_PKT_SIZE < packet_size){ fprintf(stderr, "RTP_MAX_PKT_SIZE < reads\n"); continue; } addtimestamp = ((int) packet_size * (bits_per_sample / 8.) ); err = rtp_send(sid, marker, addtimestamp, codec_num, (int8 *)sendbuf, packet_size); if (err) { err_handle(err); } marker = 0; /* not the first packet of talkspurt */ rtp_interval -= delay; nexttime += delay; gettimeofday(&now_tv, NULL); now = (now_tv.tv_sec + now_tv.tv_usec / 1000000.); err = get_rtcp_timeout(sid, &timeout_tv); if (err) { err_handle(err); } while (now < nexttime) { /* send next packet until now >= nexttime */ //printf("now = %lf\n", now); //printf("nexttime = %lf\n", nexttime); if (time_expire(&timeout_tv, &now_tv)) { err = rtp_check_on_expire(); if (err) { err_handle(err); } err = get_rtcp_timeout(sid, &timeout_tv); if (err) { err_handle(err); } printf("timeval_to_double(timeout_tv) = %lf\n", timeval_to_double(timeout_tv)); } /* BECAREFUL, if we disable RTCP, the timeval we get will be 0 */ if (timeval_to_double(timeout_tv) == 0 || nexttime < timeval_to_double(timeout_tv)) { nexttime_tv = double_to_timeval(nexttime - now); } else { nexttime_tv = double_to_timeval(timeval_to_double(timeout_tv) - now); } if (select(nfds + 1, &rfds, (fd_set *)0, (fd_set *)0, &nexttime_tv) < 0) { if (errno == EINTR) continue; else { printf("nexttime_tv.tv_sec = %ld\n", nexttime_tv.tv_sec); printf("nexttime_tv.tv_usec = %ld\n", nexttime_tv.tv_usec); printf("select error: %d\n", errno); //exit(1); } } if (FD_ISSET(rtp_sockt, &rfds)) { err = on_receive(sid, rtp_sockt, recvbuf, &recbuflen); if (err) { err_handle(err); } } else if (FD_ISSET(rtcp_sockt, &rfds)) { err = on_receive(sid, rtcp_sockt, recvbuf, &recbuflen); if (err) { err_handle(err); } adapt_bw(get_recent_recv_loosrate(sid, &ssrc)); } gettimeofday(&now_tv, NULL); now = (now_tv.tv_sec + now_tv.tv_usec / 1000000.); } // while(now < nexttime) } // while (interval) err = rtp_close_connection(sid, reason); if (err) { err_handle(err); } err = rtp_delete(sid); if (err) { err_handle(err); } return 0; }
int main(int argc, char **argv){ /* create a rtp session, we will assign unique value to identify */ err = rtp_create(&sid); if (err) { err_handle(err); } sdp_parse(sid, argv); /* parse the sdp file */ /* The application will sleep "rtp_start_time" time if "rtp_start_time" > 0 when the application is start. * * NOTE! This is not the same with Start Time in NCTUns * EX: if the Start Time in NCTUn is 5, and rtp_start_time is 3, * then the real time to startup the applicaion is 8. */ if (rtp_start_time > 0) { usleep( ((int) rtp_start_time * 1000000) ); } initial_session(argc, argv, sid); /* set local receive addr, CNAME, and startup the connectoin */ if (!trans_mode) { /* throughput is static */ if (is_audio) /* media type is audio */ delay = (ms_pkt / 1000.); else delay = (1. / framerate); /* bytes of each packet = ((bits/sample) / 8 ) * (clock rate) * ( each delay of packet in sec ) */ packet_size = (int) ( (bits_per_sample / 8.) * sampling_rate * delay); if (RTP_MAX_PKT_SIZE < packet_size) { fprintf(stderr, "The packet size is bigger than RTP_MAX_PKT_SIZE\n"); exit(1); } } /* original_bw = min_bw = 50, so we use the same pkt size */ minbw_pktsize = packet_size; printf("bits_per_sample = %lf, (bits_per_sample/8.) = %lf\n", bits_per_sample, (bits_per_sample/8.)); printf("sampling_rate = %lf\n", sampling_rate); printf("delay = %lf\n", delay); printf("packet_size = %d\n", packet_size); /* the bandwidth wa are using, 30 = frames/sec */ cur_bw = get_cur_bw(packet_size); err = rtp_get_sour_rtpsocket(sid, &rtp_sockt); if (err) { err_handle(err); } err = rtp_get_sour_rtcpsocket(sid, &rtcp_sockt); if (err) { err_handle(err); } if (rtp_sockt > nfds || rtcp_sockt > nfds) { if (rtp_sockt > rtcp_sockt) nfds = rtp_sockt; else nfds = rtcp_sockt; } FD_ZERO(&afds); FD_ZERO(&rfds); FD_SET(rtp_sockt, &afds); FD_SET(rtcp_sockt, &afds); gettimeofday(&start_tv, NULL); starttime = (start_tv.tv_sec + start_tv.tv_usec / 1000000.); nexttime = starttime; rtp_interval = rtp_stop_time - rtp_start_time; printf("rtp_interval = %f\n", rtp_interval); fflush(stdout); while (rtp_interval >= 0) { memcpy(&rfds, &afds, sizeof(rfds)); if (RTP_MAX_PKT_SIZE < packet_size){ fprintf(stderr, "RTP_MAX_PKT_SIZE < reads\n"); continue; } addtimestamp = ((int) packet_size * (bits_per_sample / 8.) ); err = rtp_send(sid, marker, addtimestamp, codec_num, (int8 *)sendbuf, packet_size); if (err) { err_handle(err); } marker = 0; /* not the first packet of talkspurt */ rtp_interval -= delay; nexttime += delay; gettimeofday(&now_tv, NULL); now = (now_tv.tv_sec + now_tv.tv_usec / 1000000.); err = get_rtcp_timeout(sid, &timeout_tv); if (err) { err_handle(err); } while (now < nexttime) { /* send next packet until now >= nexttime */ //printf("now = %lf\n", now); //printf("nexttime = %lf\n", nexttime); if (time_expire(&timeout_tv, &now_tv)) { err = rtp_check_on_expire(); if (err) { err_handle(err); } err = get_rtcp_timeout(sid, &timeout_tv); if (err) { err_handle(err); } printf("timeval_to_double(timeout_tv) = %lf\n", timeval_to_double(timeout_tv)); } /* BECAREFUL, if we disable RTCP, the timeval we get will be 0 */ if (timeval_to_double(timeout_tv) == 0 || nexttime < timeval_to_double(timeout_tv)) { nexttime_tv = double_to_timeval(nexttime - now); } else { nexttime_tv = double_to_timeval(timeval_to_double(timeout_tv) - now); } if (select(nfds + 1, &rfds, (fd_set *)0, (fd_set *)0, &nexttime_tv) < 0) { if (errno == EINTR) continue; else { printf("nexttime_tv.tv_sec = %ld\n", nexttime_tv.tv_sec); printf("nexttime_tv.tv_usec = %ld\n", nexttime_tv.tv_usec); printf("select error: %d\n", errno); //exit(1); } } if (FD_ISSET(rtp_sockt, &rfds)) { err = on_receive(sid, rtp_sockt, recvbuf, &recbuflen); if (err) { err_handle(err); } } else if (FD_ISSET(rtcp_sockt, &rfds)) { err = on_receive(sid, rtcp_sockt, recvbuf, &recbuflen); if (err) { err_handle(err); } adapt_bw(get_recent_recv_loosrate(sid, &ssrc)); } gettimeofday(&now_tv, NULL); now = (now_tv.tv_sec + now_tv.tv_usec / 1000000.); } // while(now < nexttime) } // while (interval) err = rtp_close_connection(sid, reason); if (err) { err_handle(err); } err = rtp_delete(sid); if (err) { err_handle(err); } return 0; }
void promise_actor::tell(std::unique_ptr<message> msg) { on_receive(msg->get_data()); //don't wait for this actor to finish tasks because it shouldn't have any more this->actor_system_.lock()->stop_actor(actor_key_, stop_mode::IGNORE_QUEUE); }