Changeset 4343:a67cbb88fbe0 in roaraudio for roard/clients.c
- Timestamp:
- 09/13/10 21:58:14 (14 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/clients.c
r4326 r4343 84 84 } 85 85 86 ns->blockc = 0; 87 ns->waits = NULL; 88 86 89 g_clients[i] = ns; 87 90 … … 277 280 return 0; 278 281 } 282 283 int clients_block (int id, int unblock) { 284 _CHECK_CID(id); 285 286 if ( unblock ) { 287 g_clients[id]->blockc--; 288 } else { 289 g_clients[id]->blockc++; 290 } 291 292 return 0; 293 } 294 279 295 280 296 #define MAX_STREAMLESS 8 … … 491 507 ROAR_DBG("clients_check(*): data=%p", data); 492 508 493 roar_send_message(&con, &m, flags[1] & COMMAND_FLAG_OUT_LONGDATA ? data : NULL); 509 if ( !(flags[1] & COMMAND_FLAG_OUT_NOSEND) ) 510 roar_send_message(&con, &m, flags[1] & COMMAND_FLAG_OUT_LONGDATA ? data : NULL); 494 511 495 512 if ( flags[1] & COMMAND_FLAG_OUT_CLOSECON ) … … 727 744 } 728 745 746 747 // notify thingys 748 int clients_wait (int client, struct roar_event * events, size_t num) { 749 struct roar_client_server * cs; 750 size_t i, c; 751 752 ROAR_DBG("clients_wait(client=%i, events=%p, num=%llu) = ?", client, events, (long long unsigned int)num); 753 754 _CHECK_CID(client); 755 756 cs = g_clients[client]; 757 758 if ( cs->waits != NULL ) 759 return -1; 760 761 cs->waits = roar_mm_malloc((num+1) * sizeof(struct roar_subscriber *)); 762 763 if ( cs->waits == NULL ) 764 return -1; 765 766 if ( clients_block(client, 0) != 0 ) 767 return -1; 768 769 for (i = 0; i < num; i++) { 770 #if defined(DEBUG) && 0 771 dbg_notify_cb(NULL, &(events[i]), cs); 772 #endif 773 cs->waits[i] = roar_notify_core_subscribe(NULL, &(events[i]), clients_ncb_wait, cs); 774 if ( cs->waits[i] == NULL ) { 775 for (c = 0; c < i; c++) 776 roar_notify_core_unsubscribe(NULL, cs->waits[c]); 777 roar_mm_free(cs->waits); 778 cs->waits = NULL; 779 clients_block(client, 1); 780 return -1; 781 } 782 } 783 784 cs->waits[num] = NULL; 785 786 ROAR_DBG("clients_wait(client=%i, events=%p, num=%llu) = 0", client, events, (long long unsigned int)num); 787 return 0; 788 } 789 790 void clients_ncb_wait(struct roar_notify_core * core, struct roar_event * event, void * userdata) { 791 struct roar_client_server * cs = userdata; 792 struct roar_message m; 793 struct roar_connection con; 794 uint16_t * u16 = (uint16_t *) m.data; 795 size_t tmp; 796 size_t i; 797 798 ROAR_DBG("clients_ncb_wait(core=%p, event=%p, userdata=%p) = ?", core, event, userdata); 799 800 for (i = 0; cs->waits[i] != NULL; i++) 801 roar_notify_core_unsubscribe(NULL, cs->waits[i]); 802 803 roar_mm_free(cs->waits); 804 cs->waits = NULL; 805 806 // protocol depended handling... 807 memset(&m, 0, sizeof(m)); 808 m.cmd = ROAR_CMD_OK; 809 u16[0] = ROAR_HOST2NET16(0); // Version 810 u16[1] = ROAR_HOST2NET16(0); // flags 811 812 tmp = sizeof(m.data) - 4; 813 814 roar_event_to_blob(event, m.data + 4, &tmp); 815 816 m.datalen = tmp + 4; 817 818 roar_connect_fh(&con, ROAR_CLIENT(cs)->fh); 819 roar_send_message(&con, &m, NULL); 820 // ...end of protocol depended handling. 821 822 // clients_block(, 1); 823 // TODO: FIXME: bad hack... 824 cs->blockc--; 825 } 826 729 827 //ll
Note: See TracChangeset
for help on using the changeset viewer.