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; }
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; }
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; }