protected override void OnMessageReceived(string message)
        {
            RawInput raw = InputMessageParser.ParseMessage(message);

            if (raw == null)
            {
                return;
            }

            var optionalButton = InputMessageParser.ParseButton(raw);

            if (optionalButton is AllInputButtons button)
            {
                Debug.Log($"Received input {button.ToString()}");
                InputSender.Send(button);
            }
            else
            {
                var formattedMessage = $"{raw.controllerCommand} {raw.controllerValue}";
                if (settings.LogDebugInfo)
                {
                    Debug.Log($"Received message {formattedMessage}");
                }
                Events.Instance.Raise(new InputUpdate(formattedMessage));
            }
        }
예제 #2
0
        public void Initialize(Process process)
        {
            //Console.WriteLine("|-- PreLoader: Setting process...");
            //Process[] mediviaProcess = Process.GetProcessesByName("Medivia_OGL");
            //process = mediviaProcess[0];
            if (process == null)
            {
                Console.WriteLine("null");
            }
            ClientImpl.Process = process;

            InputSender inputSender = InputSenderImpl.Instance;

            Console.WriteLine("|-- QueueManager: Creating queue manager thread ... ");
            Console.WriteLine("|-- PreLoader: Setting process... [done]");
            Client client = ClientImpl.Instance;
            Game   game   = GameImpl.Instance;
            Bot    bot    = BotImpl.Instance;
            Player player = PlayerImpl.Instance;

            Console.WriteLine("|-- PreLoader: Everyting done ...");


            //InputQueueManager queueManager = InputQueueManager.Instance;
            //Thread queueThread = new Thread(new ThreadStart(queueManager.Initialize));
            //queueThread.Start();
            //while (!queueThread.IsAlive) ;
            //Console.WriteLine("|-- QueueManager: Creating queue manager thread ... [done]");
        }
예제 #3
0
 void Awake()
 {
     vehicle = transform.parent.GetComponent <PlayerVehicle>();
     reload();
     maximumLaunchForce = minimumLaunchForce * 2f;
     inputSender        = transform.parent.GetComponent <InputSender>();
 }
예제 #4
0
 void Awake()
 {
     vehicle            = transform.parent.GetComponent <PlayerVehicleOwner>();
     networkView        = vehicle.GetNetworkView();
     maximumLaunchForce = minimumLaunchForce * 2f;
     inputSender        = transform.parent.GetComponent <InputSender>();
     projectileCamera.gameObject.SetActive(false);
 }
예제 #5
0
    void Update()
    {
        _focusList    = focusList.ToArray();
        _currentFocus = currentFocus;

        if (focusList.Count > 0)
        {
            InputSender.SendInput(new GameObject[] { focusList.Last() }, sendInput);
        }
    }
        //[DllImport("user32.dll")]
        //static extern IntPtr GetForegroundWindow();

        //[DllImport("user32.dll")]
        //static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr p2);

        //[DllImport("user32.dll")]
        //static extern bool GetGUIThreadInfo(uint idThread, ref GUITHREADINFO lpgui);

        //[DllImport("user32.dll")]
        //static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

        //struct GUITHREADINFO
        //{
        //    public int cbSize;
        //    public int flags;
        //    public IntPtr hwndActive;
        //    public IntPtr hwndFocus;
        //    public IntPtr hwndCapture;
        //    public IntPtr hwndMenuOwner;
        //    public IntPtr hwndMoveSize;
        //    public IntPtr hwndCaret;
        //    public RECT rcCaret;
        //}

        //[StructLayout(LayoutKind.Sequential)]
        //struct RECT
        //{
        //    public int left, top, right, bottom;
        //}

        //internal static IntPtr GetActiveWindowControl()
        //{
        //    IntPtr activeWin = GetForegroundWindow();
        //    if (activeWin == IntPtr.Zero)
        //    {
        //        return IntPtr.Zero;
        //    }
        //    uint threadId = GetWindowThreadProcessId(activeWin, IntPtr.Zero);
        //    GUITHREADINFO guiThreadInfo = new GUITHREADINFO();
        //    guiThreadInfo.cbSize = Marshal.SizeOf(guiThreadInfo);
        //    GetGUIThreadInfo(threadId, ref guiThreadInfo);
        //    if (guiThreadInfo.hwndFocus == IntPtr.Zero)
        //    {
        //        return activeWin; // Example: console
        //    }
        //    else
        //    {
        //        return guiThreadInfo.hwndFocus;
        //    }
        //}

        internal static void PressBackspace()
        {
            InputSender.Input[] inputs = new InputSender.Input[2];
            // Key down
            inputs[0].type   = InputSender.InputType.Keyboard;
            inputs[0].ki.wVk = (ushort)0x08;
            // Key up
            inputs[1].type       = InputSender.InputType.Keyboard;
            inputs[1].ki.wVk     = (ushort)0x08;
            inputs[1].ki.dwFlags = InputSender.KeyboardEventFlags.KeyUp;
            InputSender.SendInput(inputs);
        }
예제 #7
0
 void Start()
 {
     if (renderStreaming.runOnAwake)
     {
         return;
     }
     renderStreaming.Run(
         hardwareEncoder: RenderStreamingSettings.EnableHWCodec,
         signaling: RenderStreamingSettings.Signaling);
     inputSender = GetComponent <InputSender>();
     inputSender.OnStartedChannel += OnStartedChannel;
 }
        internal static void InputChar(char c)
        {
            ushort ch = (ushort)c;

            InputSender.Input[] inputs = new InputSender.Input[2];
            // Key down
            inputs[0].type       = InputSender.InputType.Keyboard;
            inputs[0].ki.wScan   = ch;
            inputs[0].ki.dwFlags = InputSender.KeyboardEventFlags.Unicode;
            // Key up
            inputs[1].type       = InputSender.InputType.Keyboard;
            inputs[1].ki.wScan   = ch;
            inputs[1].ki.dwFlags = InputSender.KeyboardEventFlags.Unicode | InputSender.KeyboardEventFlags.KeyUp;
            InputSender.SendInput(inputs);
        }
예제 #9
0
        private void RelaxThread()
        {
            while (_playing)
            {
                if (_playing)
                {
                    for (int i = 0; i < BMParser.Instance.HitObjects.Count; i++)
                    {
                        InputSender.ReleaseKeys();

                        while (OsuManager.Instance.CurrentAudioTime < BMParser.Instance.HitObjects[i].getStartTime())
                        {
                            Thread.Sleep(1);
                        }

                        if (BMParser.Instance.HitObjects[i].isSlider())
                        {
                            InputSender.Press();

                            while (OsuManager.Instance.CurrentAudioTime < BMParser.Instance.HitObjects[i].getEndTime())
                            {
                                Thread.Sleep(1);
                            }
                        }
                        else if (BMParser.Instance.HitObjects[i].isSpinner())
                        {
                            InputSender.Press();

                            while (OsuManager.Instance.CurrentAudioTime < BMParser.Instance.HitObjects[i].getEndTime())
                            {
                                Thread.Sleep(1);
                            }
                        }
                        else
                        {
                            InputSender.FourKeyClick();
                        }
                    }
                }
                else
                {
                    break;
                }
            }
        }
예제 #10
0
        public static void SetInputRange(this InputSender sender, RawImage image)
        {
            // correct pointer position
            Vector3[] corners = new Vector3[4];
            image.rectTransform.GetWorldCorners(corners);
            Camera camera  = image.canvas.worldCamera;
            var    corner0 = RectTransformUtility.WorldToScreenPoint(camera, corners[0]);
            var    corner2 = RectTransformUtility.WorldToScreenPoint(camera, corners[2]);
            var    region  = new Rect(
                corner0.x,
                corner0.y,
                corner2.x - corner0.x,
                corner2.y - corner0.y
                );

            var size = new Vector2Int(image.texture.width, image.texture.height);

            sender.SetInputRange(region, size);
        }
        internal static void InputString(string str)
        {
            char[] chars = str.ToCharArray();
            InputSender.Input[] inputs = new InputSender.Input[chars.Length * 2];

            for (int i = 0; i < chars.Length; i++)
            {
                ushort ch = (ushort)chars[i];
                // Key down
                inputs[i * 2].type       = InputSender.InputType.Keyboard;
                inputs[i * 2].ki.wScan   = ch;
                inputs[i * 2].ki.dwFlags = InputSender.KeyboardEventFlags.Unicode;
                // Key up
                inputs[i * 2 + 1].type       = InputSender.InputType.Keyboard;
                inputs[i * 2 + 1].ki.wScan   = ch;
                inputs[i * 2 + 1].ki.dwFlags = InputSender.KeyboardEventFlags.Unicode | InputSender.KeyboardEventFlags.KeyUp;
            }
            InputSender.SendInput(inputs);
            //System.Windows.Forms.SendKeys.Send(str);
            //const uint WM_IME_STARTCOMPOSITION = 0x010D;
            //const uint WM_IME_COMPOSITION = 0x010F;
            //const uint WM_IME_ENDCOMPOSITION = 0x010E;
            //const uint WM_IME_NOTIFY = 0x0282;
            //IntPtr active = GetActiveWindowControl();
            //if (active != IntPtr.Zero)
            //{
            //    for (int i = 0; i < chars.Length; i++)
            //    {
            //        ushort ch = (ushort)chars[i];
            //        SendMessage(active, WM_IME_STARTCOMPOSITION, (IntPtr)0, (IntPtr)0);
            //        //SendMessage(active, WM_IME_COMPOSITION, (IntPtr)(uint)ch, (IntPtr)0x0800);
            //        SendMessage(active, WM_IME_COMPOSITION, (IntPtr)0xA7DA, (IntPtr)0x0800);
            //        SendMessage(active, WM_IME_NOTIFY, (IntPtr)0x010D, (IntPtr)0);
            //        SendMessage(active, WM_IME_ENDCOMPOSITION, (IntPtr)0, (IntPtr)0);
            //        SendMessage(active, WM_IME_NOTIFY, (IntPtr)0x010E, (IntPtr)0);
            //    }
            //}
        }
 public InputSenderTests()
 {
     _sender     = new InputSender(new FakeServices());
     _pushData   = ToArraySegment("Alpha");
     _pullBuffer = ToArraySegment(1024);
 }
예제 #13
0
 void Awake()
 {
     vehicle = transform.parent.GetComponent<PlayerVehicleOwner>();
     networkView = vehicle.GetNetworkView();
     maximumLaunchForce = minimumLaunchForce * 2f;
     inputSender = transform.parent.GetComponent<InputSender>();
     projectileCamera.gameObject.SetActive(false);
 }
예제 #14
0
 void Awake()
 {
     vehicle = transform.parent.GetComponent<PlayerVehicle>();
     reload();
     maximumLaunchForce = minimumLaunchForce * 2f;
     inputSender = transform.parent.GetComponent<InputSender>();
 }
예제 #15
0
        private CallContext CreateCallContext()
        {
            _inputStream = new InputStream(() =>
            {
                var sender = new InputSender(_context.Services);
                _messageBody.Subscribe(sender.Push);
                return(sender);
            });
            _outputStream = new OutputStream(OnWrite, OnFlush);
            _duplexStream = new DuplexStream(_inputStream, _outputStream);

            var remoteIpAddress = "127.0.0.1";
            var remotePort      = "0";
            var localIpAddress  = "127.0.0.1";
            var localPort       = "80";
            var isLocal         = false;

            if (_context.Socket != null)
            {
                var remoteEndPoint = _context.Socket.RemoteEndPoint as IPEndPoint;
                if (remoteEndPoint != null)
                {
                    remoteIpAddress = remoteEndPoint.Address.ToString();
                    remotePort      = remoteEndPoint.Port.ToString(CultureInfo.InvariantCulture);
                }

                var localEndPoint = _context.Socket.LocalEndPoint as IPEndPoint;
                if (localEndPoint != null)
                {
                    localIpAddress = localEndPoint.Address.ToString();
                    localPort      = localEndPoint.Port.ToString(CultureInfo.InvariantCulture);
                }

                if (remoteEndPoint != null && localEndPoint != null)
                {
                    isLocal = Equals(remoteEndPoint.Address, localEndPoint.Address);
                }
            }

            var callContext = new CallContext();
            var request     = (IHttpRequestFeature)callContext;
            var response    = (IHttpResponseFeature)callContext;

            //var lifetime = (IHttpRequestLifetimeFeature)callContext;
            request.Protocol    = _httpVersion;
            request.Scheme      = "http";
            request.Method      = _method;
            request.Path        = _path;
            request.PathBase    = "";
            request.QueryString = _queryString;
            request.Headers     = _requestHeaders;
            request.Body        = _inputStream;
            response.Headers    = _responseHeaders;
            response.Body       = _outputStream;

            //var env = new Dictionary<string, object>();
            //env["owin.Version"] = "1.0";
            //env["owin.RequestProtocol"] = _httpVersion;
            //env["owin.RequestScheme"] = "http";
            //env["owin.RequestMethod"] = _method;
            //env["owin.RequestPath"] = _path;
            //env["owin.RequestPathBase"] = "";
            //env["owin.RequestQueryString"] = _queryString;
            //env["owin.RequestHeaders"] = _requestHeaders;
            //env["owin.RequestBody"] = _inputStream;
            //env["owin.ResponseHeaders"] = _responseHeaders;
            //env["owin.ResponseBody"] = _outputStream;
            //env["owin.CallCancelled"] = _cts.Token;
            //env["opaque.Upgrade"] = (Action<IDictionary<string, object>, Func<IDictionary<string, object>, Task>>)Upgrade;
            //env["opaque.Stream"] = _duplexStream;
            //env["server.RemoteIpAddress"] = remoteIpAddress;
            //env["server.RemotePort"] = remotePort;
            //env["server.LocalIpAddress"] = localIpAddress;
            //env["server.LocalPort"] = localPort;
            //env["server.IsLocal"] = isLocal;
            return(callContext);
        }
예제 #16
0
 public void SendButtonToController()
 {
     InputSender.Send(allInputButtons);
 }