void _textInputHelper_TextInputFinished(object sender, TextInputEventArgs e) { if (string.IsNullOrEmpty(e.Text)) { _logger.Trace("No text entered, nothing to do"); return; } _logger.Trace("Sending manually entered text"); try { var textData = new TextData(); textData.Text = e.Text; ApplicationContext.Current.ControllerClient.DataSource.AddData(textData); } catch (PhoneControllerException ex) { MessageBox.Show("An error occurred while sending the text: " + ex.Message); } }
private void AddData(string text) { // we split the text into multiple data messages if necessary // since we're dealing with unicode (UTF8) data here, the _absolute_ // worst case is that we have a (4 * character count) byte size. // so what we do is use the maximum payload for a data message divided by 4 // to be on the safe side. var chunkSize = (int)Math.Floor(DataMessage.MaxPayloadLength / 4.0); // probably 62 at the moment var chunks = (int)Math.Ceiling(text.Length / (double)chunkSize); // report one message for each chunk for (int i = 0; i < chunks; i++) { var skip = i * chunkSize; var remainingSize = text.Length - skip; // create fragment string textFragment; if (remainingSize > chunkSize) { textFragment = text.Substring(skip, chunkSize); } else { textFragment = text.Substring(skip); } // create message and report var data = new TextData(); data.Text = textFragment; RaiseDataAcquiredEvent(data); } }
/// <summary> /// Creates a data message from raw message data, starting at a given offset in the raw data. /// </summary> /// <param name="rawMessage">The raw message data.</param> /// <param name="start">The index the recreation of the data message should be started at.</param> /// <returns>A data message of correct type, recreated from the raw data.</returns> public static DataMessage CreateFromRawMessage(byte[] rawMessage, int start) { // result DataMessage result = null; // inspect type var dataType = (DataType)BitConverter.ToInt32(rawMessage, start + 1); // simple switch here switch (dataType) { case DataType.ControllerInfo: result = new ControllerInfoData(); break; case DataType.Accelerometer: result = new AccelerometerData(); break; case DataType.Compass: result = new CompassData(); break; case DataType.Gyroscope: result = new GyroscopeData(); break; case DataType.Motion: result = new MotionData(); break; case DataType.Touch: result = new TouchData(); break; case DataType.Tap: result = new TapData(); break; case DataType.DoubleTap: result = new DoubleTapData(); break; case DataType.Hold: result = new HoldData(); break; case DataType.Flick: result = new FlickData(); break; case DataType.FreeDrag: result = new FreeDragData(); break; case DataType.HorizontalDrag: result = new HorizontalDragData(); break; case DataType.VerticalDrag: result = new VerticalDragData(); break; case DataType.DragComplete: result = new DragCompleteData(); break; case DataType.CustomDrag: result = new CustomDragData(); break; case DataType.CustomDragComplete: result = new CustomDragCompleteData(); break; case DataType.Pinch: result = new PinchData(); break; case DataType.PinchComplete: result = new PinchCompleteData(); break; case DataType.Text: result = new TextData(); break; } // fill from raw data if (result != null) { result.FromByteArray(rawMessage, start); } else { if (Debugger.IsAttached) { Debugger.Break(); } } return result; }
private void Process(TextData data) { // this simply passes on the transmitted text data as keyboard input to the operating system Win32Wrapper.SendKeyboardInput(data.Text); }