'  
'   Rebex Sample Code License
' 
'   Copyright 2025, REBEX CR s.r.o.
'   All rights reserved.
'   https://www.rebex.net/
' 
'   Permission to use, copy, modify, and/or distribute this software for any
'   purpose with or without fee is hereby granted.
' 
'   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
'   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
'   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
'   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
'   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
'   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
'   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
'   OTHER DEALINGS IN THE SOFTWARE.
' 

Imports System.ComponentModel
Imports System.Windows.Forms
Imports Rebex.TerminalEmulation

Namespace Scripts
    <Description("06: Scripting conditions")> _
    Public Class ScriptingConditions
        Public Shared Sub Execute(scripting As Scripting)
            ' detect prompt for later use
            scripting.DetectPrompt()

            ' start multiline echo command
            scripting.SendCommand("echo \")

            ' see if we get ">" (= multiline echo is supported) or Prompt
            Dim match As ScriptMatch = scripting.WaitFor(">", ScriptEvent.Prompt)

            ' equivalent to:
            ' ScriptMatch match = scripting.WaitFor(">" | ScriptEvent.Prompt);
            ' and to:
            ' ScriptMatch match = scripting.WaitFor(ScriptEvent.Or(ScriptEvent.FromString(">"), ScriptEvent.Prompt));

            ' did we get ">"?
            If match.IsEventMatched(">") Then
                ' end the command with Ctrl+C
                scripting.Send(ConsoleKey.C, ConsoleModifiers.Control)

                ' wait if prompt appears
                match = scripting.WaitFor(ScriptEvent.Prompt Or ScriptEvent.Delay(200))

                ' if prompt does not appear
                If Not match.IsPrompt Then
                    ' send something as the echo message
                    scripting.SendCommand("Server does not support Ctrl+C.")

                    ' and wait for prompt
                    scripting.WaitFor(ScriptEvent.Prompt)
                End If
            End If

            ' end of script
        End Sub
    End Class
End Namespace
