Пример #1
0
        private async void OnControlRelinquished(object sender, ClientConnectionChangedEventArgs e)
        {
            await EnsureInitialized();

            await mutableStateLock.WaitAsync();

            string desktopName = e.DesktopName.NormalizeDesktopName();

            if (localState is LocalState.Controlled controlled)
            {
                HashSet <string> by = new HashSet <string>(controlled.By);
                by.Remove(desktopName);
                if (by.Count == 0)
                {
                    DebugMessage("no controllers left, becoming relinquished");
                    localState = new LocalState.Relinquished();
                    DebugMessage("blocking local input");
                    inputManager.BlockInput(true);
                }
                else
                {
                    DebugMessage("controllers remaining, not relinquished");
                    localState = new LocalState.Controlled(by);
                }
            }

            mutableStateLock.Release();
        }
Пример #2
0
        public async Task Initialize()
        {
            await inputManager.StartAsync();

            localCursorPosition = await inputManager.MouseListener.GetCursorPosition();

            await mutableStateLock.WaitAsync();

            selfDesktop = new Desktop()
            {
                Name = selfName, Displays = inputManager.DisplayAdapter.GetDisplays(), PrimaryDisplay = inputManager.DisplayAdapter.GetPrimaryDisplay()
            };
            mouseDeltaDebounceValueX = selfDesktop.PrimaryDisplay.Value.Width / 3;
            mouseDeltaDebounceValueY = selfDesktop.PrimaryDisplay.Value.Height / 3;
            desktops = new List <Desktop>()
            {
                selfDesktop
            };
            displayLayout = new DisplayLayout(desktops);

            var(_, display) = displayLayout.FindPoint(TranslateLocalToGlobal(localCursorPosition)) !.Value;
            localState      = new LocalState.Uncontrolled(display, selfDesktop.PrimaryDisplay.Value);
            mutableStateLock.Release();

            initialized.TrySetResult(null);
        }
Пример #3
0
        private async void OnControlAssumed(object sender, ClientConnectionChangedEventArgs e)
        {
            await EnsureInitialized();

            await mutableStateLock.WaitAsync();

            string desktopName = e.DesktopName.NormalizeDesktopName();

            if (localState is LocalState.Controlling controlling)
            {
                var client = await workspaceNetwork.GetClientDesktop(controlling.ActiveDesktop.Name);

                if (client != null)
                {
                    DebugMessage($"controlling {controlling.ActiveDesktop.Name}, relinquishing");
                    await client.RelinquishControl();
                }
            }

            HashSet <string> by;

            if (localState is LocalState.Controlled controlled)
            {
                by = new HashSet <string>(controlled.By);
            }
            else
            {
                by = new HashSet <string>();
            }
            DebugMessage($"adding {desktopName} to controlled by");
            by.Add(desktopName);
            localState = new LocalState.Controlled(by);
            DebugMessage("unblocking local input");
            inputManager.BlockInput(false);

            mutableStateLock.Release();
        }