Esempio n. 1
0
        /// <summary>
        /// Overrides the text on screen with this input
        /// </summary>
        /// <param name="text">String to override with</param>
        public async Task OverrideText(String text)
        {
            var new_version = current_text_version + 1;
            var msg         = new SystemTextInputMessage()
            {
                TextSessionId       = (uint)session_config.TextSessionId,
                BaseVersion         = current_text_version,
                SubmittedVersion    = new_version,
                TotalTextBytelength = (uint)text.Length,
                SelectionStart      = -1,
                SelectionLength     = -1,
                TextChunk           = text,
            };
            await _transport.SendAsync(msg);

            current_session_input = msg;
        }
Esempio n. 2
0
        private async void OnMessageReceived(object sender, MessageReceivedEventArgs <SessionMessageBase> e)
        {
            if (e.Message is SystemTextConfigurationMessage msg_config)
            {
                ResetSession();
                session_config = msg_config;
                logger.LogTrace($"SystemTextConfigurationMessage received prompt: {session_config.Prompt}");
                SystemTextConfigurationMessageReceived?.Invoke(this, new EventArgs {
                });
            }
            else if (e.Message is SystemTextDoneMessage msg_done)
            {
                if (session_config?.TextSessionId == msg_done.TextSessionId)
                {
                    ResetSession();
                }
                else if (session_config == null && is_first_session) //we joined an in progress session, a done message will fire often on first letter hit so we can hijack it to be able to send text
                {
                    session_config = new SystemTextConfigurationMessage {
                        TextSessionId = msg_done.TextSessionId
                    };
                    current_text_version = msg_done.TextVersion;
                }
                is_first_session = false;
                SystemTextDoneMessageReceived?.Invoke(this, new EventArgs {
                });
            }
            else if (e.Message is SystemTextInputMessage msg_text)
            {
                current_session_input = msg_text;
                current_text_version  = msg_text.SubmittedVersion;
                var ack_msg = new SystemTextAcknowledgeMessage {
                    TextSessionId = (uint)session_config.TextSessionId, TextVersionAck = current_text_version
                };
                logger.LogTrace($"SystemTextInputMessage text: {current_session_input.TextChunk} Sending textack of: TextSessionId {ack_msg.TextSessionId} TextVersionAck: {ack_msg.TextVersionAck}");
                await _transport.SendAsync(ack_msg);

                SystemTextInputMessageReceived?.Invoke(this, new EventArgs {
                });
            }
            else if (e.Message is SystemTextAcknowledgeMessage msg_ack)
            {
                current_text_version = msg_ack.TextVersionAck;
            }
        }
Esempio n. 3
0
 private void ResetSession()
 {
     session_config        = null;
     current_session_input = null;
     current_text_version  = 0;
 }
Esempio n. 4
0
 public async Task TextInput(SystemTextInputMessage msg)
 {
     await SendMessage(msg);
 }