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); }
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(); } }