package main import ( "ecs/servers/event/handler" "ecs/servers/event/logic" "github.com/oylshe1314/framework/client/db" "github.com/oylshe1314/framework/client/sd" "github.com/oylshe1314/framework/client/sd/zk" "github.com/oylshe1314/framework/errors" "github.com/oylshe1314/framework/server" "github.com/oylshe1314/framework/util" "time" ) type eventServer struct { server.NamedServer InnerServer server.HttpServer dbConfig *db.Config MongoClient db.MongoClient sdConfig *sd.Config RegisterClient sd.RegisterClient eventManager *logic.EventManager innerHandler *handler.InnerHandler } func NewEventServer() server.Server { return &eventServer{} } func (this *eventServer) WithDbConfig(config *db.Config) { this.dbConfig = config } func (this *eventServer) WithSdConfig(config *sd.Config) { this.sdConfig = config } func (this *eventServer) Init() (err error) { err = this.NamedServer.Init() if err != nil { return err } this.InnerServer.SetServer(this) err = this.InnerServer.Init() if err != nil { return errors.Errorf("the 'InnerServer' init failed, %v", err) } this.MongoClient = db.NewMongoClient(this.dbConfig) err = this.MongoClient.Init() if err != nil { return errors.Errorf("the 'MongoClient' init failed, %v", err) } this.RegisterClient = zk.NewRegisterClient(this, this.sdConfig, &this.InnerServer.Listener, nil) err = this.RegisterClient.Init() if err != nil { return errors.Errorf("the 'RegisterClient' init failed, %v", err) } this.eventManager = logic.NewEventManager(this, this.MongoClient) err = this.eventManager.Init() if err != nil { return errors.Errorf("the 'eventManager' init failed, %v", err) } this.innerHandler = handler.NewInnerHandler(this, this.eventManager) //Register server event log handler this.InnerServer.PostHandler("/log/server/operate", this.innerHandler.ServerOperate) this.InnerServer.PostHandler("/log/server/online", this.innerHandler.ServerOnline) //Register player event log handler this.InnerServer.PostHandler("/log/player/common", this.innerHandler.PlayerCommon) this.InnerServer.PostHandler("/log/player/create", this.innerHandler.PlayerCreate) this.InnerServer.PostHandler("/log/player/login", this.innerHandler.PlayerLogin) this.InnerServer.PostHandler("/log/player/recharge", this.innerHandler.PlayerRecharge) this.InnerServer.PostHandler("/log/player/level", this.innerHandler.PlayerLevel) this.InnerServer.PostHandler("/log/player/item/obtain", this.innerHandler.PlayerItemObtain) this.InnerServer.PostHandler("/log/player/item/Consume", this.innerHandler.PlayerItemConsume) this.InnerServer.PostHandler("/log/player/mail", this.innerHandler.PlayerMail) this.InnerServer.PostHandler("/log/player/task", this.innerHandler.PlayerTask) this.InnerServer.PostHandler("/log/player/store", this.innerHandler.PlayerStore) this.InnerServer.PostHandler("/log/player/activity", this.innerHandler.PlayerActivity) return nil } func (this *eventServer) Serve() (err error) { return util.WaitAny(this.InnerServer.Serve, this.RegisterClient.Work) } func (this *eventServer) Close() error { this.Logger().Info("The 'MysqlClient' is closing") _ = this.MongoClient.Close() this.Logger().Info("The 'RegisterClient' is closing") _ = this.RegisterClient.Close() this.Logger().Info("The 'InnerServer' is closing") _ = this.InnerServer.Close() this.Logger().Info("Server closed") time.Sleep(time.Second) _ = this.NamedServer.Close() return nil }