int main(int argc, const char **argv) { int i; // A service discovery object player_sd_t* sd; // Initialize multiclient mclient = playerc_mclient_create(); // Initialize service discovery sd = player_sd_init(); // Look for Player devices if(player_sd_browse(sd, 0.0, 1, browse_cb) != 0) { puts("player_sd_browse error"); exit(-1); } for(;;) { // Update name service player_sd_update(sd,0.0); // Wait for new data from server playerc_mclient_read(mclient,10); } // Shutdown for(i=0;i<num_laserdevs;i++) { playerc_laser_unsubscribe(lasers[i]); playerc_laser_destroy(lasers[i]); playerc_client_disconnect(clients[i]); playerc_client_destroy(clients[i]); } playerc_mclient_destroy(mclient); return(0); }
int player_sd_browse(player_sd_t* sd, double timeout, int keepalive, player_sd_browse_callback_fn_t cb) { DNSServiceErrorType sdErr; player_sd_mdns_t* mdns = (player_sd_mdns_t*)(sd->sdRef); int retval=0; struct timeval curr; double currtime, starttime; double polltime; // Close any previously open session if(mdns->browseRef_valid) { DNSServiceRefDeallocate(mdns->browseRef); mdns->browseRef_valid = 0; } mdns->flags = 0; // Initiate the browse session if((sdErr = DNSServiceBrowse(&(mdns->browseRef), 0, 0, PLAYER_SD_SERVICENAME, NULL, browseCB, (void*)sd)) != kDNSServiceErr_NoError) { PLAYER_ERROR1("DNSServiceBrowse returned error: %d", sdErr); return(-1); } mdns->browseRef_valid = 1; mdns->callb = cb; // Should we wait here for responses? if(timeout != 0.0) { // Record the current time gettimeofday(&curr,NULL); starttime = currtime = curr.tv_sec + curr.tv_usec / 1e6; // Update until the requested time has elapsed while((timeout < 0.0) || ((currtime - starttime) < timeout)) { // Set up to poll on the DNSSD socket if(timeout > 0.0) polltime = timeout - (currtime - starttime); else polltime = -1.0; if((retval = player_sd_update(sd,polltime)) != 0) break; gettimeofday(&curr,NULL); currtime = curr.tv_sec + curr.tv_usec / 1e6; } } // Should we leave the session open? if(!keepalive) { DNSServiceRefDeallocate(mdns->browseRef); mdns->browseRef_valid = 0; } return(retval); }