diff options
Diffstat (limited to 'server/red_dispatcher.c')
-rw-r--r-- | server/red_dispatcher.c | 74 |
1 files changed, 22 insertions, 52 deletions
diff --git a/server/red_dispatcher.c b/server/red_dispatcher.c index 43f061d9..78557766 100644 --- a/server/red_dispatcher.c +++ b/server/red_dispatcher.c @@ -1001,35 +1001,10 @@ void red_dispatcher_async_complete(struct RedDispatcher *dispatcher, free(async_command); } -static RedChannel *red_dispatcher_display_channel_create(RedDispatcher *dispatcher) -{ - RedWorkerMessageDisplayChannelCreate payload; - RedChannel *display_channel; - - dispatcher_send_message(&dispatcher->dispatcher, - RED_WORKER_MESSAGE_DISPLAY_CHANNEL_CREATE, - &payload); - receive_data(dispatcher->dispatcher.send_fd, &display_channel, sizeof(RedChannel *)); - return display_channel; -} - -static RedChannel *red_dispatcher_cursor_channel_create(RedDispatcher *dispatcher) -{ - RedWorkerMessageCursorChannelCreate payload; - RedChannel *cursor_channel; - - dispatcher_send_message(&dispatcher->dispatcher, - RED_WORKER_MESSAGE_CURSOR_CHANNEL_CREATE, - &payload); - receive_data(dispatcher->dispatcher.send_fd, &cursor_channel, sizeof(RedChannel *)); - return cursor_channel; -} - void red_dispatcher_init(QXLInstance *qxl) { RedDispatcher *red_dispatcher; - RedChannel *display_channel; - RedChannel *cursor_channel; + RedChannel *channel; ClientCbs client_cbs = { NULL, }; spice_return_if_fail(qxl != NULL); @@ -1074,34 +1049,29 @@ void red_dispatcher_init(QXLInstance *qxl) // TODO: reference and free RedWorker *worker = red_worker_new(qxl, red_dispatcher); - red_worker_run(worker); - - num_active_workers = 1; - display_channel = red_dispatcher_display_channel_create(red_dispatcher); - - if (display_channel) { - client_cbs.connect = red_dispatcher_set_display_peer; - client_cbs.disconnect = red_dispatcher_disconnect_display_peer; - client_cbs.migrate = red_dispatcher_display_migrate; - red_channel_register_client_cbs(display_channel, &client_cbs); - red_channel_set_data(display_channel, red_dispatcher); - red_channel_set_cap(display_channel, SPICE_DISPLAY_CAP_MONITORS_CONFIG); - red_channel_set_cap(display_channel, SPICE_DISPLAY_CAP_PREF_COMPRESSION); - red_channel_set_cap(display_channel, SPICE_DISPLAY_CAP_STREAM_REPORT); - reds_register_channel(display_channel); - } - - cursor_channel = red_dispatcher_cursor_channel_create(red_dispatcher); + // TODO: move to their respective channel files + channel = red_worker_get_cursor_channel(worker); + client_cbs.connect = red_dispatcher_set_cursor_peer; + client_cbs.disconnect = red_dispatcher_disconnect_cursor_peer; + client_cbs.migrate = red_dispatcher_cursor_migrate; + red_channel_register_client_cbs(channel, &client_cbs); + red_channel_set_data(channel, red_dispatcher); + reds_register_channel(channel); + + channel = red_worker_get_display_channel(worker); + client_cbs.connect = red_dispatcher_set_display_peer; + client_cbs.disconnect = red_dispatcher_disconnect_display_peer; + client_cbs.migrate = red_dispatcher_display_migrate; + red_channel_register_client_cbs(channel, &client_cbs); + red_channel_set_data(channel, red_dispatcher); + red_channel_set_cap(channel, SPICE_DISPLAY_CAP_MONITORS_CONFIG); + red_channel_set_cap(channel, SPICE_DISPLAY_CAP_PREF_COMPRESSION); + red_channel_set_cap(channel, SPICE_DISPLAY_CAP_STREAM_REPORT); + reds_register_channel(channel); - if (cursor_channel) { - client_cbs.connect = red_dispatcher_set_cursor_peer; - client_cbs.disconnect = red_dispatcher_disconnect_cursor_peer; - client_cbs.migrate = red_dispatcher_cursor_migrate; - red_channel_register_client_cbs(cursor_channel, &client_cbs); - red_channel_set_data(cursor_channel, red_dispatcher); - reds_register_channel(cursor_channel); - } + red_worker_run(worker); + num_active_workers = 1; qxl->st->dispatcher = red_dispatcher; red_dispatcher->next = dispatchers; |