| /** | |
| * | |
| * 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) | |
| } | |