For more information, read the message_daemon documentation.
One possibly subtle point to make here: This is a static member function that serves as a thread entry routine. As establishing connections can hang until timeout, I do this in parallel such that the connections which can be made aren't forced to wait in queue until the hanging connection times out.
long BlurbProgressWindow::DeliverBlurb( void *data ) { BlurbProgressWindow *object = (BlurbProgressWindow *)data; status_t status; BMessage *outgoing = object->_outgoing; ASSERT( outgoing != 0 ); BlurbPerson person; status = outgoing->FindFlat( "person", &person ); ASSERT( status == B_OK ); object->SetMaxValue( 2.0 ); object->SetTrailingText( "Connecting" ); try { NetMessenger msgr( person.Host(), kBlurbSignature, -1, &status, 5e-6 ); if ( status != B_OK ) throw( msgr.Error() ); object->Update( 1.0 ); object->SetTrailingText( "Delivering" ); status = msgr.SendMessage( outgoing ); if ( status != B_OK ) throw( msgr.Error() ); object->Update( 1.0 ); object->SetTrailingText( "Finishing" ); object->PostMessage( B_QUIT_REQUESTED, object ); } catch ( netstatus_t netstat ) { object->Lock(); char inform[255]; switch ( netstat ) { case NET_UNKNOWN_HOST: sprintf( inform, "Could not resolve hostname \"%s\".", person.Host() ); break; case NET_TIMED_OUT: sprintf( inform, "The connection timed out." ); break; case NET_CANT_CONNECT: sprintf( inform, "The connection request was rejected." ); break; case NET_INTERNAL_ERROR: sprintf( inform, "A message_daemon internal error occurred. Try restarting it." ); break; case NET_NO_DAEMON: sprintf( inform, "message_daemon must be running to use BeBlurb." ); break; case NET_DISCONNECTED: sprintf( inform, "The connection was disrupted." ); break; default: sprintf( inform, "An unknown error occurred." ); break; } object->_report->SetText( (const char *)inform ); object->_bar->RemoveSelf(); object->_root->AddChild( object->_report ); object->_root->Draw( object->_root->Frame() ); object->Unlock(); } return 0; }
jason@jeff.ces.cwru.edu | Last Updated: 03 March 98 |