Esempio n. 1
0
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            _notifyIcon = (TaskbarIcon)FindResource("NotifyIcon");

            var container = TinyIoCContainer.Current;

            RegisterServices(container);

            UseRepositoryMonitor(container);
            UseExplorerHandler(container);

            _bus = new TinyMessageBus("RepoZ-ipc");
            _bus.MessageReceived += Bus_MessageReceived;

            _updateTimer = new Timer(CheckForUpdatesAsync, null, 5000, Timeout.Infinite);

            // We noticed that the hotkey registration causes a high CPU utilization if the window was not shown before.
            // To fix this, we need to make the window visible in EnsureWindowHandle() but we set the opacity to 0.0 to prevent flickering
            var window = container.Resolve <MainWindow>();

            EnsureWindowHandle(window);

            _hotkey = new HotKey(47110815);
            _hotkey.Register(window, HotKey.VK_R, HotKey.MOD_ALT | HotKey.MOD_CTRL, OnHotKeyPressed);
        }
 private static void WaitTillMessageGetsPublished(TinyMessageBus bus)
 {
     while (bus.MessagesPublished != 1)
     {
         Thread.Sleep(10);
     }
 }
Esempio n. 3
0
        public override bool Notify(ref PluginNotification notifyData)
        {
            switch (notifyData.Reason)
            {
            case Reason.DatabaseLoaded:
                Workspace = notifyData.Workspace;

                _tradeClient = new TinyMessageBus("trades");
                _tradeClient.MessageReceived += _tradeClient_MessageReceived;

                _tickClient = new TinyMessageBus("ticks");
                _tickClient.MessageReceived += _tickClient_MessageReceived;
                break;

            case Reason.DatabaseUnloaded:
                _tradeClient.Dispose();
                _tickClient.Dispose();
                break;

            case Reason.RightMouseClick:
                break;

            default:
                break;
            }

            return(true);
        }
        public async Task <bool> WaitMutex(bool force, IntPtr wParam, IntPtr lParam)
        {
            bool exist = !WaitMutexInternal(force);

            if (exist)
            {
                string[] originalArgs = Environment.GetCommandLineArgs();
                string[] args         = new string[originalArgs.Length - 1];

                if (args.Length > 0)
                {
                    args = originalArgs.Skip(1).ToArray();
                }

                if (args.Length > 0)
                {
                    await SendMessageStringUtf8("SendArgs",
                                                string.Join(" || ", args))
                    .ConfigureAwait(true);
                }
                else
                {
                    _ = WindowNative.PostMessage((IntPtr)WindowNative.HwndBroadcast,
                                                 SingleInstanceMessage, wParam, lParam);
                }
            }
            else
            {
                InstanceBus = new TinyMessageBus($"Bus_{UniqueName}");
                InstanceBus.MessageReceived += InstanceBus_MessageReceived;
            }

            return(!exist);
        }
        private static void SignalFirstInstance(string channelName, IList <string> commandLineArgs)
        {
            var bus            = new TinyMessageBus(channelName);
            var serializedArgs = commandLineArgs.Serialize();

            bus.PublishAsync(serializedArgs).Wait();
            WaitTillMessageGetsPublished(bus);
        }
Esempio n. 6
0
        public IPCHelper(string id, string targetId)
        {
            TargetID = targetId;
            ID       = id;

            _messageBus = new TinyMessageBus("livewallpaper");
            _messageBus.MessageReceived += _messageBus_MessageReceived;
        }
 private static void CreateRemoteService(ISingleInstance instance, string channelName)
 {
     messageBus = new TinyMessageBus(channelName);
     messageBus.MessageReceived += (_, e) =>
     {
         instance.OnInstanceInvoked(e.Message.Deserialize <string[]>());
     };
 }
 public static void Cleanup()
 {
     if (messageBus != null)
     {
         messageBus.Dispose();
         messageBus = null;
     }
     if (singleMutex != null)
     {
         singleMutex.Close();
         singleMutex = null;
     }
 }
        public SingleInstanceApp(string uniqueName)
        {
            if (uniqueName == null)
            {
                throw new ArgumentNullException(nameof(uniqueName));
            }

            UniqueName = uniqueName;

            LocalBus = new TinyMessageBus($"Bus_{uniqueName}");

            Mutex = new Mutex(true, uniqueName);
            SingleInstanceMessage = WindowNative.RegisterWindowMessage($"WM_{uniqueName}");
        }
Esempio n. 10
0
    public static void messagingClient()
    {
        using (var messagebus1 = new TinyMessageBus("ExampleChannel"))

        {
            string[] args = Environment.GetCommandLineArgs();
            foreach (var torrentFile in args)
            {
                if (!torrentFile.EndsWith(".exe")) //string message = @"X:\one.torrent";
                {
                    messagebus1.PublishAsync(Encoding.UTF8.GetBytes(torrentFile));
                }
            }
        }
    }
Esempio n. 11
0
    public static async Task <string> messagingServer()
    {
        using (var messagebus1 = new TinyMessageBus("ExampleChannel"))

        {
            var taskCompletition = new TaskCompletionSource <string>();

            messagebus1.MessageReceived +=
                (sender, e) =>
            {
                var ret = Encoding.UTF8.GetString(e.Message);

                taskCompletition.TrySetResult(ret);
            };
            return(await taskCompletition.Task);
        }
    }
Esempio n. 12
0
        public async Task All_messages_should_be_processed_even_with_multiple_buses_in_a_complex_scenario()
        {
            var messagesPerRound = 32;
            var firstRound       = 16;
            var secondRound      = 16;
            var total            = firstRound + secondRound;
            var rnd = new Random();

            // Start up two chatty buses talking to each other
            using (var messagebus1 = new TinyMessageBus("Example"))
                using (var messagebus2 = new TinyMessageBus("Example"))
                {
                    var buses = new[] { messagebus1, messagebus2 };

                    for (int i = 0; i < firstRound; i++)
                    {
                        var   messages = Enumerable.Range(0, messagesPerRound).Select(_ => Guid.NewGuid().ToByteArray());
                        await buses[rnd.Next() % buses.Length].PublishAsync(messages);
                    }

                    // Add a new bus to the mix
                    using (var messagebus3 = new TinyMessageBus("Example"))
                    {
                        buses = new[] { messagebus1, messagebus2, messagebus3 };

                        for (int i = 0; i < secondRound; i++)
                        {
                            var   messages = Enumerable.Range(0, messagesPerRound).Select(_ => Guid.NewGuid().ToByteArray());
                            await buses[rnd.Next() % buses.Length].PublishAsync(messages);
                        }

                        // Force a final read of all messages to work around timing issuees
                        await messagebus1.ReadAsync();

                        await messagebus2.ReadAsync();

                        await messagebus3.ReadAsync();

                        // Counters should check out
                        Assert.Equal(total * messagesPerRound - messagebus1.MessagesPublished, messagebus1.MessagesReceived);
                        Assert.Equal(total * messagesPerRound - messagebus2.MessagesPublished, messagebus2.MessagesReceived);
                        Assert.Equal(secondRound * messagesPerRound - messagebus3.MessagesPublished, messagebus3.MessagesReceived);
                    }
                }
        }
Esempio n. 13
0
        public async Task Messages_sent_from_one_bus_should_be_received_by_the_other()
        {
            using var messagebus1 = new TinyMessageBus("Example");
            using var messagebus2 = new TinyMessageBus("Example");

            var received = "nope";

            messagebus2.MessageReceived += (sender, e) => received = Encoding.UTF8.GetString(e.Message);

            await messagebus1.PublishAsync(Encoding.UTF8.GetBytes("lorem"));

            await messagebus2.PublishAsync(Encoding.UTF8.GetBytes("ipsum"));

            await messagebus1.PublishAsync(Encoding.UTF8.GetBytes("yes"));

            await messagebus2.ReadAsync();

            Assert.Equal("yes", received);
        }
Esempio n. 14
0
        public void Messages_sent_from_one_bus_should_be_received_by_the_other()
        {
            using (var messagebus1 = new TinyMessageBus("Example"))
                using (var messagebus2 = new TinyMessageBus("Example"))
                {
                    var received = "nope";

                    messagebus2.MessageReceived += (sender, e) => received = Encoding.UTF8.GetString(e.Message);

                    messagebus1.PublishAsync(Encoding.UTF8.GetBytes("lorem"));
                    messagebus2.PublishAsync(Encoding.UTF8.GetBytes("ipsum"));
                    messagebus1.PublishAsync(Encoding.UTF8.GetBytes("yes"));

                    messagebus1.ProcessIncomingMessages();
                    messagebus2.ProcessIncomingMessages();

                    Assert.Equal("yes", received);
                }
        }
Esempio n. 15
0
    public static string  messagingServer0()
    {
        using (var messagebus1 = new TinyMessageBus("ExampleChannel"))

        {
            string ret = null;

            messagebus1.MessageReceived +=
                (sender, e) => ret       = Encoding.UTF8.GetString(e.Message);


            while (true)
            {
                if (ret != null)
                {
                    return(ret);
                }
            }
        }
    }
Esempio n. 16
0
        public void All_messages_should_be_processed_even_with_multiple_buses_in_a_complex_scenario()
        {
            var rnd = new Random();

            // Start up two chatty buses talking to each other
            using (var messagebus1 = new TinyMessageBus("Example"))
                using (var messagebus2 = new TinyMessageBus("Example"))
                {
                    var buses = new[] { messagebus1, messagebus2 };

                    for (int i = 0; i < 512; i++)
                    {
                        buses[rnd.Next() % buses.Length].PublishAsync(Guid.NewGuid().ToByteArray());
                    }

                    // Wait for all messages published so far to be processed so the counters will be predictable
                    messagebus1.WaitAll();
                    messagebus2.WaitAll();

                    // Add a new bus to the mix
                    using (var messagebus3 = new TinyMessageBus("Example"))
                    {
                        buses = new[] { messagebus1, messagebus2, messagebus3 };

                        for (int i = 0; i < 512; i++)
                        {
                            buses[rnd.Next() % buses.Length].PublishAsync(Guid.NewGuid().ToByteArray());
                        }

                        // Force a final read of all messages to work around timing issuees
                        messagebus1.ProcessIncomingMessages();
                        messagebus2.ProcessIncomingMessages();
                        messagebus3.ProcessIncomingMessages();

                        // Counters should check out
                        Assert.Equal(1024 - messagebus1.MessagesSent, messagebus1.MessagesReceived);
                        Assert.Equal(1024 - messagebus2.MessagesSent, messagebus2.MessagesReceived);
                        Assert.Equal(512 - messagebus3.MessagesSent, messagebus3.MessagesReceived);
                    }
                }
        }
Esempio n. 17
0
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            _notifyIcon = (TaskbarIcon)FindResource("NotifyIcon");

            var container = TinyIoCContainer.Current;

            RegisterServices(container);

            UseRepositoryMonitor(container);
            UseExplorerHandler(container);

            _bus = new TinyMessageBus("RepoZ-ipc");
            _bus.MessageReceived += Bus_MessageReceived;

            _updateTimer = new Timer(CheckForUpdatesAsync, null, 5000, Timeout.Infinite);

            _hotkey = new HotKey(47110815);
            _hotkey.Register(container.Resolve <MainWindow>(), HotKey.VK_R, HotKey.MOD_ALT | HotKey.MOD_CTRL, OnHotKeyPressed);
        }
Esempio n. 18
0
        public static void Main(string[] args)
        {
            using (var messagebus1 = new TinyMessageBus("Example"))
                using (var messagebus2 = new TinyMessageBus("Example"))
                {
                    messagebus1.MessageReceived +=
                        (sender, e) => Console.WriteLine("Received: " + Encoding.UTF8.GetString(e.Message));

                    while (true)
                    {
                        var message = Console.ReadLine();

                        if (string.IsNullOrWhiteSpace(message))
                        {
                            return;
                        }

                        messagebus2.PublishAsync(Encoding.UTF8.GetBytes(message));
                    }
                }
        }
Esempio n. 19
0
        public async Task All_primitives_should_be_configurable()
        {
            var name           = "Example";
            var maxReaderCount = TinyReadWriteLock.DefaultMaxReaderCount;
            var maxFileSize    = TinyMemoryMappedFile.DefaultMaxFileSize;
            var waitTimeout    = TinyReadWriteLock.DefaultWaitTimeout;

            // Create underlying primitives first so they can be configured
            var lockMutex        = TinyReadWriteLock.CreateMutex(name);
            var lockSemaphore    = TinyReadWriteLock.CreateSemaphore(name, maxReaderCount);
            var memoryMappedFile = TinyMemoryMappedFile.CreateOrOpenMemoryMappedFile(name, maxFileSize);
            var eventWaitHandle  = TinyMemoryMappedFile.CreateEventWaitHandle(name);

            // Create the actual message bus
            var tinyReadWriteLock    = new TinyReadWriteLock(lockMutex, lockSemaphore, maxReaderCount, waitTimeout);
            var tinyMemoryMappedFile = new TinyMemoryMappedFile(memoryMappedFile, eventWaitHandle, maxFileSize, tinyReadWriteLock, disposeLock: true);

            using var messageBus = new TinyMessageBus(tinyMemoryMappedFile, disposeFile: true);
            await messageBus.PublishAsync(Encoding.UTF8.GetBytes("lorem"));

            await messageBus.PublishAsync(Encoding.UTF8.GetBytes("ipsum"));
        }
Esempio n. 20
0
        public static async Task Main(string[] args)
        {
            using var messagebus1 = new TinyMessageBus("Example");
            using var messagebus2 = new TinyMessageBus("Example");

            Console.WriteLine("Type something and press enter. Ctrl+C to quit.");

            messagebus1.MessageReceived +=
                (sender, e) => Console.WriteLine("Received: " + Encoding.UTF8.GetString(e.Message));

            while (true)
            {
                var message = Console.ReadLine();

                if (string.IsNullOrWhiteSpace(message))
                {
                    return;
                }

                await messagebus2.PublishAsync(Encoding.UTF8.GetBytes(message));
            }
        }
Esempio n. 21
0
        static void Main(string[] args)
        {
            Console.OutputEncoding = Encoding.UTF8;
            IMessage message = null;

            args = PrepareArguments(args);

            if (IsHelpRequested(args))
            {
                ShowHelp();
            }
            else
            {
                if (CommandLine.Parser.Default.ParseArguments(args, new CommandLineOptions(),
                                                              (v, o) => ParseCommandLineOptions(v, o, out message)))
                {
                    if (message.HasRemoteCommand)
                    {
                        _bus = new TinyMessageBus("RepoZ-ipc");
                        _bus.MessageReceived += _bus_MessageReceived;

                        byte[] load = Encoding.UTF8.GetBytes(message.GetRemoteCommand());
                        _bus.PublishAsync(load);

                        var watch = Stopwatch.StartNew();

                        while (_answer == null && watch.ElapsedMilliseconds <= 3000)
                        {                         /* ... wait ... */
                        }

                        if (_answer == null)
                        {
                            Console.WriteLine("RepoZ seems not to be running :(");
                        }

                        _bus?.Dispose();

                        if (_repos != null && _repos.Any())
                        {
                            WriteRepositories();
                        }
                        else
                        {
                            Console.WriteLine(_answer);
                        }
                    }

                    message?.Execute(_repos);

                    WriteHistory();
                }
                else
                {
                    Console.WriteLine("Could not parse command line arguments.");
                }
            }

            if (Debugger.IsAttached)
            {
                Console.ReadKey();
            }
        }
Esempio n. 22
0
 private static void CreateRemoteService(string channelName)
 {
     messageBus = new TinyMessageBus(channelName);
     messageBus.MessageReceived += MessageBus_MessageReceived;
 }
Esempio n. 23
0
 public EventPublisher()
 {
     _trades = new TinyMessageBus("trades");
     _ticks  = new TinyMessageBus("ticks");
 }