Esempio n. 1
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. 2
0
 private void ResetSession()
 {
     session_config        = null;
     current_session_input = null;
     current_text_version  = 0;
 }