/** * * Agora Real Time Engagement * Created by Wei Hu in 2022-10. * Copyright (c) 2024 Agora IO. All rights reserved. * */ package main import ( "flag" "log" "os" "ten_framework/ten" ) type appConfig struct { PropertyFilePath string } type defaultApp struct { ten.DefaultApp cfg *appConfig } func (p *defaultApp) OnConfigure( tenEnv ten.TenEnv, ) { // Using the default property.json if not specified. if len(p.cfg.PropertyFilePath) > 0 { if b, err := os.ReadFile(p.cfg.PropertyFilePath); err != nil { log.Fatalf("Failed to read property file %s, err %v\n", p.cfg.PropertyFilePath, err) } else { tenEnv.InitPropertyFromJSONBytes(b) } } tenEnv.OnConfigureDone() } func startAppBlocking(cfg *appConfig) { appInstance, err := ten.NewApp(&defaultApp{ cfg: cfg, }) if err != nil { log.Fatalf("Failed to create the app, %v\n", err) } appInstance.Run(true) appInstance.Wait() ten.EnsureCleanupWhenProcessExit() } func setDefaultLog() { log.SetFlags(log.LstdFlags | log.Lmicroseconds) } func main() { // Set the default log format globally, users can use `log.Println()` directly. setDefaultLog() cfg := &appConfig{} flag.StringVar(&cfg.PropertyFilePath, "property", "", "The absolute path of property.json") flag.Parse() startAppBlocking(cfg) }