public static Transport Create(AddressEntry entry) { switch (entry.Method) { case "tcp": { Transport transport = new SocketTransport (); transport.Open (entry); return transport; } #if !PORTABLE case "unix": { Transport transport = new UnixNativeTransport (); transport.Open (entry); return transport; } #endif #if ENABLE_PIPES case "win": { Transport transport = new PipeTransport (); transport.Open (entry); return transport; } #endif default: throw new NotSupportedException ("Transport method \"" + entry.Method + "\" not supported"); } }
public static Transport Create(AddressEntry entry) { switch (entry.Method) { case "tcp": { Transport transport = new SocketTransport (); transport.Open (entry); return transport; } case "unix": { if (OSHelpers.PlatformIsUnixoid) { Transport transport = new UnixNativeTransport (); transport.Open (entry); return transport; } break; } #if ENABLE_PIPES case "win": { Transport transport = new PipeTransport (); transport.Open (entry); return transport; } #endif // "autolaunch:" means: the first client user of the dbus library shall spawn the daemon on itself, see dbus 1.7.8 from http://dbus.freedesktop.org/releases/dbus/ case "autolaunch": { if (OSHelpers.PlatformIsUnixoid) break; string addr = Address.GetSessionBusAddressFromSharedMemory (); if (string.IsNullOrEmpty (addr)) { // we have to launch the daemon ourselves string oldDir = Directory.GetCurrentDirectory (); // Without this, the "current" folder for the new process will be the one where the current // executable resides, and as a consequence,that folder cannot be relocated/deleted unless the daemon is stopped Directory.SetCurrentDirectory (Environment.GetFolderPath (Environment.SpecialFolder.System)); Process process = Process.Start (DBUS_DAEMON_LAUNCH_COMMAND); if (process == null) { Directory.SetCurrentDirectory (oldDir); throw new NotSupportedException ("Transport method \"autolaunch:\" - cannot launch dbus daemon '" + DBUS_DAEMON_LAUNCH_COMMAND + "'"); } // wait for daemon Stopwatch stopwatch = new Stopwatch (); stopwatch.Start (); do { addr = Address.GetSessionBusAddressFromSharedMemory (); if (String.IsNullOrEmpty (addr)) Thread.Sleep (100); } while (String.IsNullOrEmpty (addr) && stopwatch.ElapsedMilliseconds <= 5000); Directory.SetCurrentDirectory (oldDir); } if (string.IsNullOrEmpty (addr)) throw new NotSupportedException ("Transport method \"autolaunch:\" - timeout during access to freshly launched dbus daemon"); return Create (AddressEntry.Parse (addr)); } } throw new NotSupportedException ("Transport method \"" + entry.Method + "\" not supported"); }