コード例 #1
0
ファイル: websocket.c プロジェクト: kripton/krad_radio-1
int32_t interweb_ws_kr_client_connect(kr_web_client *client) {

  client->ws.krclient = kr_client_create ("websocket client");

  if (client->ws.krclient == NULL) {
    return -1;
  }

  if (!kr_connect (client->ws.krclient, client->server->sysname)) {
    kr_client_destroy (&client->ws.krclient);
    return -1;
  }

  kr_mixer_info_get(client->ws.krclient);
  kr_mixer_portgroup_list (client->ws.krclient);
  kr_compositor_subunit_list (client->ws.krclient);
  kr_subscribe_all (client->ws.krclient);

  //printk("interweb_ws_kr_client_connect happens");

  return 0;
}
コード例 #2
0
ファイル: gnmc.c プロジェクト: dsheeler/krad_radio
int gnmc_run (kr_client_t *client , char *sysname) {

	if (socketpair(AF_UNIX, SOCK_STREAM, 0, sockeys)) { 
		return 0;
	}

	signal (SIGWINCH, signal_recv);

	gnmc_t *monitor;
	int32_t res,ch;
	struct timeval tv1,tv2;
	double timevar;
	double past;
	uint8_t dummy[1];
  screen_t **scrs;

	ch = 0;
	past = 0;
	timevar = 0;

	monitor = gnmc_init (sysname);

  scrs = monitor->main_scrs;

	gettimeofday(&tv1, NULL);

	kr_system_info (client);
	kr_remote_list (client);
	kr_mixer_portgroups (client);
	kr_compositor_info (client);

	kr_subscribe_all (client);

	while (1) {

		res = kr_gnmc_poll (client,POLL_INTERVAL);

		gettimeofday(&tv2, NULL);

		timevar = floor ( ((tv2.tv_usec / 1000) + (tv2.tv_sec * 1000)) - 
      ((tv1.tv_usec / 1000) + (tv1.tv_sec * 1000))  + past);

		if (timevar >= UPDATE_INTERVAL) { 
			kr_system_info (client);
			kr_remote_list (client);
			kr_compositor_info (client);
			past = 0;
		}
		else {
			past += timevar;
		}

		gettimeofday(&tv1, NULL);

    switch (res) {
      case 0:
      	continue;
      case 1: 
        ch = getch ();
        break;
      case 2:
        kr_delivery_recv (client);
        monitor->info->deliveries++;
        if (gnmc_delivery_handler (client,monitor) < 0) {
        	gnmc_cleanup (monitor);
        	return -1;
        }
        update_panels ();
        doupdate ();
        continue;
      case -1:
        // error
      	if (gnmc_disconnect_handler (client,sysname,monitor)) {
      		gnmc_cleanup (monitor);
      		return 0;
      	}
        continue;
      case -2:
        continue;
      case 3:
      	read (sockeys[1],dummy,1);
      	gnmc_resize_handler (monitor);
      	continue;
    }


    switch (ch) {
    	case 'r':
    		gnmc_resize_handler (monitor);
    		break;
   		case 27:
   		  if (monitor->top_screen != NULL) {
          gnmc_top_screen_destroy (monitor);
    		}
    		else  {
   		  	gnmc_cleanup (monitor);
   		  	return 0;
   		  }
    		break;
   		case 9:
   		  screen_set_focus_next (scrs,monitor->nscrs);
   		  screen_focus_curr (scrs,monitor->nscrs);
    		break;
    	case KEY_UP:
    		screen_focus_prev_box (screen_focused (scrs,monitor->nscrs));
    		break;
    	case KEY_DOWN:
    		screen_focus_next_box (screen_focused (scrs,monitor->nscrs));
    		break;
    	case 10:
    		gnmc_interactive_box_handler (monitor,client);
    		break;
   		default:
   			break;
    }

    update_panels ();
    doupdate ();

	}

	return 0;
}
コード例 #3
0
ファイル: gnmc.c プロジェクト: dsheeler/krad_radio
static int32_t gnmc_disconnect_handler (kr_client_t *client, 
  char *sysname, gnmc_t *mon) {

	int32_t rows,cols;
	WINDOW *win;
	PANEL *pan;
	int32_t ch;
	int32_t c;
  struct timeval disc_time,curr_time,gap_time;
  double usec1,usec2;

  disc_time = mon->info->disc_time;
  gettimeofday (&disc_time,NULL);

	getmaxyx (stdscr,rows,cols);

	c = 44+strlen (sysname);

	win = newwin (9,c,rows/2 - 5, cols/2 - c/2);
	box (win,0,0);
	pan = new_panel (win);
	wattron (win,A_BOLD);

	mvwprintw (win,2,2,"Connection lost to ");

	wattron (win,A_BOLD | A_UNDERLINE);

	wprintw (win,"%s",sysname);

	wattroff (win,A_UNDERLINE);

	wprintw (win," krad radio daemon");

  mvwprintw (win,4,2,"Disconnected since %s",asctime (localtime (&disc_time.tv_sec)));

	while (!kr_connect (client, sysname)) {
		ch = getch ();
		if (ch == 27) {
			return 1;
		}

    wmove (win,6,0);
    wclrtoeol (win);
    box (win,0,0);

    gettimeofday (&curr_time,NULL);

    usec1 = curr_time.tv_sec * 1000000 + curr_time.tv_usec;
    usec2 = disc_time.tv_sec * 1000000 + disc_time.tv_usec;

    gap_time.tv_sec = floor ((usec1 - usec2) / 1000000 );
    gap_time.tv_usec = (usec1 - usec2) - (gap_time.tv_sec * 1000000);

    mvwprintw (win,6,2,"Disconnected for %d.%0d sec",gap_time.tv_sec,gap_time.tv_usec / 100000);

    update_panels ();
    doupdate ();
    
    usleep (1000*100);
  }

  curses_delpan (pan);

  kr_subscribe_all (client);

  touchwin (stdscr);
  update_panels ();
  doupdate ();

	return 0;
}