Пример #1
0
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);
		}

	}
}
Пример #2
0
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;
    }
}
Пример #3
0
/* 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;
}
Пример #4
0
 /// 解析回调
 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);
 }
Пример #5
0
// ==========================================================================
// 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);
}
Пример #6
0
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;
}
Пример #7
0
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);
		}
	}
}
Пример #8
0
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;
}
Пример #9
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;
}
Пример #10
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;
}
Пример #11
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;
}
Пример #12
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);
}