void * xmmsc_mainloop_gmain_init (xmmsc_connection_t *c) { xmmsc_glib_watch_t *watch; gint fd; g_return_val_if_fail (c, NULL); fd = xmmsc_io_fd_get (c); watch = g_new0 (xmmsc_glib_watch_t, 1); watch->conn = xmmsc_ref (c); watch->iochan = g_io_channel_unix_new (fd); xmmsc_io_need_out_callback_set (c, xmmsc_mainloop_need_out_cb, watch); watch->source_id = g_io_add_watch (watch->iochan, G_IO_IN | G_IO_ERR | G_IO_HUP, xmmsc_glib_read_cb, watch); g_io_channel_unref (watch->iochan); if (xmmsc_io_want_out (c)) { xmmsc_mainloop_need_out_cb (TRUE, watch); } return watch; }
XmmsQT4::XmmsQT4 (xmmsc_connection_t *xmmsc) : QObject (), Xmms::MainloopInterface (xmmsc), m_fd (0), m_rsock (0), m_wsock (0), m_xmmsc (xmmsc) { m_fd = xmmsc_io_fd_get (xmmsc); xmmsc_io_need_out_callback_set (xmmsc, CheckWrite, this); m_rsock = new QSocketNotifier (m_fd, QSocketNotifier::Read, this); connect (m_rsock, SIGNAL (activated (int)), SLOT (OnRead ())); m_rsock->setEnabled (true); m_wsock = new QSocketNotifier (m_fd, QSocketNotifier::Write, this); connect (m_wsock, SIGNAL (activated (int)), SLOT (OnWrite ())); m_wsock->setEnabled (false); running_ = true; }
/* * call-seq: * xc.io_on_need_out { |flag| } * * Sets the block that's called when the output socket state changes. */ static VALUE c_io_on_need_out (VALUE self) { RbXmmsClient *xmms = NULL; if (!rb_block_given_p ()) return Qnil; Data_Get_Struct (self, RbXmmsClient, xmms); CHECK_DELETED (xmms); xmms->io_need_out_cb = rb_block_proc (); xmmsc_io_need_out_callback_set (xmms->real, on_io_need_out, (void *) self); return Qnil; }
unsigned int xmmsc_mainloop_cf_init (xmmsc_connection_t *c, CFRunLoopSourceRef *source) { CFRunLoopRef runLoopRef = CFRunLoopGetCurrent (); CFRunLoopSourceRef runLoopSourceRef; CFSocketContext context; CFSocketRef sockRef; CFOptionFlags flags; context.version = 0; context.info = c; context.retain = NULL; context.release = NULL; context.copyDescription = NULL; flags = kCFSocketReadCallBack; if (xmmsc_io_want_out (c)) flags |= kCFSocketWriteCallBack; sockRef = CFSocketCreateWithNative (kCFAllocatorDefault, xmmsc_io_fd_get (c), flags, &xmmsc_io_cf_event_callback, &context); if (!sockRef) return 0; runLoopSourceRef = CFSocketCreateRunLoopSource (kCFAllocatorDefault, sockRef, XMMSC_CF_SOURCE_PRIORITY); CFRunLoopAddSource (runLoopRef, runLoopSourceRef, kCFRunLoopDefaultMode); xmmsc_io_need_out_callback_set (c, xmmsc_io_cf_toggle_socket_flags, sockRef); *source = runLoopSourceRef; return 1; }