|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
package extension |
|
|
|
import ( |
|
"fmt" |
|
|
|
"ten_framework/ten" |
|
) |
|
|
|
const ( |
|
textDataTextField = "text" |
|
textDataFinalField = "is_final" |
|
|
|
cmdNameFlush = "flush" |
|
) |
|
|
|
type interruptDetectorExtension struct { |
|
ten.DefaultExtension |
|
} |
|
|
|
func newExtension(name string) ten.Extension { |
|
return &interruptDetectorExtension{} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
func (p *interruptDetectorExtension) OnData( |
|
tenEnv ten.TenEnv, |
|
data ten.Data, |
|
) { |
|
text, err := data.GetPropertyString(textDataTextField) |
|
if err != nil { |
|
tenEnv.LogWarn(fmt.Sprintf("OnData GetProperty %s error: %v", textDataTextField, err)) |
|
return |
|
} |
|
|
|
final, err := data.GetPropertyBool(textDataFinalField) |
|
if err != nil { |
|
tenEnv.LogWarn(fmt.Sprintf("OnData GetProperty %s error: %v", textDataFinalField, err)) |
|
return |
|
} |
|
|
|
tenEnv.LogDebug(fmt.Sprintf("OnData %s: %s %s: %t", textDataTextField, text, textDataFinalField, final)) |
|
|
|
if final || len(text) >= 2 { |
|
flushCmd, _ := ten.NewCmd(cmdNameFlush) |
|
tenEnv.SendCmd(flushCmd, nil) |
|
|
|
tenEnv.LogInfo(fmt.Sprintf("sent cmd: %s", cmdNameFlush)) |
|
} |
|
} |
|
|
|
func init() { |
|
|
|
ten.RegisterAddonAsExtension( |
|
"interrupt_detector", |
|
ten.NewDefaultExtensionAddon(newExtension), |
|
) |
|
} |
|
|