public int TriggerContinuousTouchEventOnClient(string caseName)
        {
            this.rdprfxAdapter.Accept(rdpbcgrAdapter.ServerStack, rdpbcgrAdapter.SessionContext);
            this.rdprfxAdapter.ReceiveAndCheckClientCoreData();
            TS_RFX_ICAP[] supportedRfxCaps;
            this.rdprfxAdapter.ReceiveAndCheckClientCapabilities(maxRequestSize, out supportedRfxCaps);

            RdpeiUtility.SendInstruction(RdpeiSUTControlData.ContinuousTouchEventControlData);

            return(1);
        }
Example #2
0
        public int TriggerMultiTouchEventOnClient(ushort contactCount)
        {
            this.rdprfxAdapter.Accept(rdpbcgrAdapter.ServerStack, rdpbcgrAdapter.SessionContext);
            this.rdprfxAdapter.ReceiveAndCheckClientCoreData();
            TS_RFX_ICAP[] supportedRfxCaps;
            this.rdprfxAdapter.ReceiveAndCheckClientCapabilities(maxRequestSize, out supportedRfxCaps);

            RdpeiUtility.SendInstruction(RdpeiSUTControlData.MultitouchEventControlData(contactCount));

            return(1);
        }
        public int TriggerDismissHoveringContactPduOnClient(string caseName)
        {
            this.rdprfxAdapter.Accept(rdpbcgrAdapter.ServerStack, rdpbcgrAdapter.SessionContext);
            this.rdprfxAdapter.ReceiveAndCheckClientCoreData();
            TS_RFX_ICAP[] supportedRfxCaps;
            this.rdprfxAdapter.ReceiveAndCheckClientCapabilities(maxRequestSize, out supportedRfxCaps);

            RdpeiUtility.SendInstruction(RdpeiSUTControlData.DismissHoveringContactPduControlData);

            ushort btnLeft = (ushort)(rdpbcgrAdapter.CapabilitySetting.DesktopWidth - 160);
            ushort btnTop  = (ushort)(rdpbcgrAdapter.CapabilitySetting.DesktopHeight - 120);

            RdpeiUtility.AddButton("Exit", btnLeft, btnTop);
            return(1);
        }
        public void Rdpei_TouchInputTest_Positive_SingleTouchContactPosition()
        {
            if (isInteractiveAdapter)
            {
                Site.Assume.Inconclusive("This case will not be bun when using interactive client control adapter.");
            }

            Site.Log.Add(LogEntryKind.Debug, "Establishing RDP connection ...");
            StartRDPConnection();

            Site.Log.Add(LogEntryKind.Debug, "Creating dynamic virtual channels for MS-RDPEI ...");
            bool bProtocolSupported = this.rdpeiServer.CreateRdpeiDvc(waitTime);

            TestSite.Assert.IsTrue(bProtocolSupported, "Client should support this protocol.");

            // RDPEI initializing phase
            Site.Log.Add(LogEntryKind.Debug, "Sending a RDPINPUT_SC_READY_PDU.");
            RDPINPUT_SC_READY_PDU scReadyPdu = this.rdpeiServer.CreateRdpInputScReadyPdu();

            this.rdpeiServer.SendRdpInputScReadyPdu(scReadyPdu);

            Site.Log.Add(LogEntryKind.Debug, "Expecting RDPINPUT_CS_READY_PDU ...");
            RDPINPUT_CS_READY_PDU csReadyPdu = this.rdpeiServer.ExpectRdpInputCsReadyPdu(waitTime);

            TestSite.Assert.IsTrue(csReadyPdu != null, "Client is expected to send RDPINPUT_CS_READY_PDU to the server.");

            this.rdpeiSUTControlAdapter.TriggerPositionSpecifiedTouchEventOnClient("Rdpei_TouchInputTest_Positive_SingleTouchEvent");
            // RDPEI running phase
            ushort width  = this.rdpbcgrAdapter.CapabilitySetting.DesktopWidth;
            ushort height = this.rdpbcgrAdapter.CapabilitySetting.DesktopHeight;
            // The diameter of the circle to be sent to the client.
            ushort diam   = 64;
            Random random = new Random();

            // The left and top position of the circles to be sent to the client.
            //ushort[] arr = { 0, 0, 0, (ushort)(height - diam), (ushort)(width - diam), 0, (ushort)(width - diam), (ushort)(height - diam), (ushort)(random.Next(width - diam * 2) + diam), (ushort)(random.Next(height - diam * 2) + diam) };
            ushort[] arr          = { 0, 0, 0, (ushort)(height - diam), (ushort)(width - diam), 0, (ushort)(width - diam), (ushort)(height - diam), (ushort)(width / 2 - diam / 2), (ushort)(height / 2 - diam / 2) };
            bool     isFirstFrame = true;

            for (int i = 0; i < 5; i++)
            {
                ushort left = arr[i * 2];
                ushort top  = arr[i * 2 + 1];

                if (isManagedAdapter)
                {
                    RdpeiUtility.SendCircle(diam, Color.Red, left, top);
                }
                Site.Log.Add(LogEntryKind.Debug, "Expecting RDPINPUT_TOUCH_EVENT_PDU ...");

                ushort preLeft = (i == 0) ? (ushort)(width + 1) : arr[(i - 1) * 2];
                ushort preTop  = (i == 0) ? (ushort)(height + 1) : arr[2 * i - 1];
                bool   isExpectedFrameReceived = false;
                while (!isExpectedFrameReceived)
                {
                    RDPINPUT_TOUCH_EVENT_PDU touchEventPdu = this.rdpeiServer.ExpectRdpInputTouchEventPdu(waitTime);
                    VerifyRdpInputTouchEventPdu(touchEventPdu, isFirstFrame);
                    if (isFirstFrame)
                    {
                        isFirstFrame = false;
                    }
                    foreach (RDPINPUT_TOUCH_FRAME f in touchEventPdu.frames)
                    {
                        foreach (RDPINPUT_CONTACT_DATA d in f.contacts)
                        {
                            int contactX = d.x.ToInt();
                            int contactY = d.y.ToInt();
                            // Consume the RDPINPUT_TOUCH_EVENT_PDU received from last touch action.
                            if (contactX >= preLeft && contactX <= preLeft + diam && contactY >= preTop && contactY <= preTop + diam)
                            {
                                continue;
                            }
                            // Touch out of the valid range, send the unexpected position instruction to the client, and fail the case.
                            if (contactX < left || contactX > left + diam || contactY < top || contactY > top + diam)
                            {
                                if (isManagedAdapter)
                                {
                                    ushort l = (contactX < diam / 2) ? (ushort)0 : (contactX > (ushort)(rdpbcgrAdapter.CapabilitySetting.DesktopWidth - diam / 2) ? (ushort)(rdpbcgrAdapter.CapabilitySetting.DesktopWidth - diam) : (ushort)(contactX - diam / 2));
                                    ushort t = (contactY < diam / 2) ? (ushort)0 : (contactY > (ushort)(rdpbcgrAdapter.CapabilitySetting.DesktopHeight - diam / 2) ? (ushort)(rdpbcgrAdapter.CapabilitySetting.DesktopHeight - diam) : (ushort)(contactY - diam / 2));
                                    RdpeiUtility.SendCircle(diam, Color.Green, l, t);

                                    RdpeiUtility.SendInstruction(RdpeiSUTControlData.UnexpectedPositionNotice);
                                }
                                Site.Assert.IsTrue(false, "Client is expected to send a RDPINPUT_TOUCH_EVENT_PDU whose contact position near ({0}, {1}), not ({2}, {3}).", left + diam / 2, top + diam / 2, contactX, contactY);
                            }
                            else
                            {
                                isExpectedFrameReceived = true;
                            }
                        }
                    }
                }
                // Update on the client screen.
                if (isManagedAdapter)
                {
                    RdpeiUtility.SendCircle(diam, Color.Black, left, top);
                }
            }
            if (isManagedAdapter)
            {
                RdpeiUtility.SendConfirmImage();
            }
        }