配置读取功能实现,核心功能未实现
This commit is contained in:
26
pkg/boot/bootstrap.go
Normal file
26
pkg/boot/bootstrap.go
Normal file
@@ -0,0 +1,26 @@
|
||||
package boot
|
||||
|
||||
import (
|
||||
"NaiveBotRouter/pkg/conf"
|
||||
"NaiveBotRouter/pkg/log"
|
||||
ws "NaiveBotRouter/pkg/websocket"
|
||||
"flag"
|
||||
)
|
||||
|
||||
var (
|
||||
cfgFile string
|
||||
debug bool
|
||||
)
|
||||
|
||||
func init() {
|
||||
flag.StringVar(&cfgFile, "config", "config.toml", "config file")
|
||||
flag.BoolVar(&debug, "debug", false, "debug mode")
|
||||
flag.Parse()
|
||||
|
||||
log.InitLog(debug)
|
||||
}
|
||||
|
||||
func Bootstrap() {
|
||||
conf.InitConfig(cfgFile)
|
||||
ws.ServeBackendServer()
|
||||
}
|
||||
74
pkg/conf/conf.go
Normal file
74
pkg/conf/conf.go
Normal file
@@ -0,0 +1,74 @@
|
||||
package conf
|
||||
|
||||
import (
|
||||
"NaiveBotRouter/pkg/log"
|
||||
"NaiveBotRouter/pkg/util"
|
||||
"encoding/json"
|
||||
"github.com/BurntSushi/toml"
|
||||
"os"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Common Common
|
||||
Servers map[string]Server
|
||||
}
|
||||
|
||||
type Common struct {
|
||||
Name string
|
||||
}
|
||||
|
||||
type Server struct {
|
||||
Addr string
|
||||
}
|
||||
|
||||
var (
|
||||
GlobalConfig Config
|
||||
BackendConfig Server
|
||||
)
|
||||
|
||||
// 释放默认配置文件
|
||||
func releaseConfig(file string, config Config) {
|
||||
f, err := util.CreateNestedFile(file)
|
||||
if err != nil {
|
||||
log.Log.Fatalf("failed to create default config: %s", err.Error())
|
||||
}
|
||||
|
||||
encoder := toml.NewEncoder(f)
|
||||
err = encoder.Encode(config)
|
||||
if err != nil {
|
||||
log.Log.Fatalf("internal - encoding toml: %s", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
func InitConfig(file string) {
|
||||
GlobalConfig = defaultConfig
|
||||
|
||||
if util.NotExists(file) {
|
||||
// 默认配置文件不存在则创建
|
||||
if file == "config.toml" {
|
||||
releaseConfig(file, GlobalConfig)
|
||||
log.Log.Infof("default config created")
|
||||
} else {
|
||||
log.Log.Fatalf("config file not exists: %s", file)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
// 解析配置文件
|
||||
_, err := toml.DecodeFile(file, &GlobalConfig)
|
||||
if err != nil {
|
||||
log.Log.Fatalf("toml decoding error: %s", err.Error())
|
||||
}
|
||||
|
||||
// 验证必须的字段
|
||||
if v, ok := GlobalConfig.Servers["backend"]; ok {
|
||||
BackendConfig = v
|
||||
} else {
|
||||
log.Log.Fatalf("mission required field: servers.backend")
|
||||
}
|
||||
|
||||
jsonConfig, err := json.Marshal(GlobalConfig)
|
||||
if err == nil {
|
||||
log.Log.Debugf("config loaded: %s", string(jsonConfig))
|
||||
}
|
||||
}
|
||||
7
pkg/conf/conf_test.go
Normal file
7
pkg/conf/conf_test.go
Normal file
@@ -0,0 +1,7 @@
|
||||
package conf
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestInitConfig(t *testing.T) {
|
||||
InitConfig("fconfig.toml")
|
||||
}
|
||||
15
pkg/conf/default.go
Normal file
15
pkg/conf/default.go
Normal file
@@ -0,0 +1,15 @@
|
||||
package conf
|
||||
|
||||
var defaultConfig Config
|
||||
|
||||
func init() {
|
||||
defaultConfig = Config{
|
||||
Common: Common{
|
||||
Name: "NaiveBotRouter",
|
||||
},
|
||||
Servers: map[string]Server{
|
||||
"backend": {Addr: "127.0.0.1:5700/ws"},
|
||||
"frontend1": {Addr: "127.0.0.1:6600/onebot/v11/ws"},
|
||||
},
|
||||
}
|
||||
}
|
||||
23
pkg/log/log.go
Normal file
23
pkg/log/log.go
Normal file
@@ -0,0 +1,23 @@
|
||||
package log
|
||||
|
||||
import (
|
||||
nested "github.com/antonfisher/nested-logrus-formatter"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
var Log *logrus.Logger
|
||||
|
||||
func InitLog(debug bool) {
|
||||
Log = logrus.New()
|
||||
Log.SetFormatter(&nested.Formatter{
|
||||
HideKeys: true,
|
||||
FieldsOrder: []string{"component", "category"},
|
||||
})
|
||||
if debug {
|
||||
Log.SetLevel(logrus.DebugLevel)
|
||||
} else {
|
||||
Log.SetLevel(logrus.InfoLevel)
|
||||
}
|
||||
|
||||
Log.Debug("logger loaded")
|
||||
}
|
||||
30
pkg/util/file.go
Normal file
30
pkg/util/file.go
Normal file
@@ -0,0 +1,30 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
func Exists(name string) bool {
|
||||
if _, err := os.Stat(name); err != nil {
|
||||
if os.IsNotExist(err) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func NotExists(name string) bool {
|
||||
return !Exists(name)
|
||||
}
|
||||
|
||||
func CreateNestedFile(path string) (*os.File, error) {
|
||||
basePath := filepath.Dir(path)
|
||||
if !Exists(basePath) {
|
||||
err := os.MkdirAll(basePath, 0700)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return os.Create(path)
|
||||
}
|
||||
32
pkg/websocket/backend.go
Normal file
32
pkg/websocket/backend.go
Normal file
@@ -0,0 +1,32 @@
|
||||
package websocket
|
||||
|
||||
import (
|
||||
"NaiveBotRouter/pkg/conf"
|
||||
"NaiveBotRouter/pkg/log"
|
||||
"github.com/gorilla/websocket"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
var upgrader = websocket.Upgrader{} // use default options
|
||||
|
||||
func ServeBackendServer() {
|
||||
http.HandleFunc("/onebot/v11/ws", listen)
|
||||
http.ListenAndServe(conf.GlobalConfig.Servers["backend"].Addr, nil)
|
||||
}
|
||||
|
||||
func listen(w http.ResponseWriter, r *http.Request) {
|
||||
ws, err := upgrader.Upgrade(w, r, nil)
|
||||
if err != nil {
|
||||
log.Log.Info("upgrade:", err)
|
||||
return
|
||||
}
|
||||
defer ws.Close()
|
||||
for {
|
||||
_, message, err := ws.ReadMessage()
|
||||
if err != nil {
|
||||
log.Log.Info("read:", err)
|
||||
break
|
||||
}
|
||||
log.Log.Infof("recv: %s", message)
|
||||
}
|
||||
}
|
||||
1
pkg/websocket/frontend.go
Normal file
1
pkg/websocket/frontend.go
Normal file
@@ -0,0 +1 @@
|
||||
package websocket
|
||||
Reference in New Issue
Block a user