func main() { runtime.GOMAXPROCS(runtime.NumCPU()*2 + 1) http.Handle("/", http.FileServer(http.Dir("./www/"))) poll := poller.NewPoller(10 * time.Second) http.Handle("/feed", poll) http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) { data := r.URL.Query().Get("data") poll.Broadcast("boardChange", data+" @ "+time.Now().String()) }) url := ":8080" fmt.Println("Listening @", url) if err := http.ListenAndServe(url, nil); err != nil { panic(err) } }
func init() { TaskBoardService = new(TaskBoardServiceImpl) c, err := goconfig.ReadConfigFile("taskboard.ini") if err != nil { panic(err) } /* * ======= * WEB * ======= */ ContentDir, _ = c.GetString("web", "dir") ContentDir = replaceOsEnv(ContentDir) fmt.Println("[web]dir=", ContentDir) IpPort, _ = c.GetString("web", "ip_port") IpPort = replaceOsEnv(IpPort) fmt.Println("[web]ip_port=", IpPort) HttpsOnly, _ = c.GetBool("web", "https_only") fmt.Println("[web]https_only=", HttpsOnly) postLimit, _ = c.GetInt64("web", "post_limit") fmt.Println("[web]post_limit=", postLimit) /* * ======= * LOG * ======= */ //// log configuration - its the same the default level, _ := c.GetString("log", "level") level = replaceOsEnv(level) fmt.Println("[log]level=", level) file, _ := c.GetString("log", "file") file = replaceOsEnv(file) fmt.Println("[log]file=", file) count, _ := c.GetInt64("log", "count") fmt.Println("[log]count=", count) size, _ := c.GetInt64("log", "size") fmt.Println("[log]size=", size) logToConsole, _ := c.GetBool("log", "console") fmt.Println("[log]console=", logToConsole) logLevel := log.ParseLevel(level, log.ERROR) if logLevel <= log.INFO { log.ShowCaller(true) } // setting root writers writers := make([]log.LogWriter, 0) writers = append(writers, log.NewRollingFileAppender(file, size, int(count), true)) if logToConsole { writers = append(writers, log.NewConsoleAppender(false)) } log.Register("/", logLevel, writers...) //log.Register("/", logLevel, log.NewRollingFileAppender(file, size, int(count), true)) //master.SetLevel("pqp", log.LogLevel(level)) logger = log.LoggerFor("taskboad/biz/impl") // smtp SmtpHost, _ = c.GetString("smtp", "host") SmtpHost = replaceOsEnv(SmtpHost) fmt.Println("[smtp]host=", SmtpHost) SmtpPort, _ = c.GetString("smtp", "port") SmtpPort = replaceOsEnv(SmtpPort) fmt.Println("[smtp]port=", SmtpPort) SmtpUser, _ = c.GetString("smtp", "user") SmtpUser = replaceOsEnv(SmtpUser) fmt.Println("[smtp]user="******"smtp", "pass") SmtpPass = replaceOsEnv(SmtpPass) SmtpFrom, _ = c.GetString("smtp", "from") SmtpFrom = replaceOsEnv(SmtpFrom) fmt.Println("[smtp]from=", SmtpFrom) /* * ======================= * BEGIN DATABASE CONFIG * ======================= */ // database configuration driverName, _ := c.GetString("database", "driver_name") driverName = replaceOsEnv(driverName) fmt.Println("[database]driver_name=", driverName) dataSourceName, _ := c.GetString("database", "data_source_name") dataSourceName = replaceOsEnv(dataSourceName) fmt.Println("[database]data_source_name=", dataSourceName) statementCache, _ := c.GetInt64("database", "statement_cache") fmt.Println("[database]statement_cache=", statementCache) idle, _ := c.GetInt64("database", "idle_connections") fmt.Println("[database]idle_connections=", idle) appDB, err := sql.Open(driverName, dataSourceName) if err != nil { panic(err) } if idle > 0 { appDB.SetMaxIdleConns(int(idle)) } // wake up the database pool err = appDB.Ping() if err != nil { panic(err) } var translator = trx.NewMySQL5Translator() TM = db.NewTransactionManager( // database appDB, // databse context factory - called for each transaction func(inTx *bool, c dbx.IConnection) db.IDb { return db.NewDb(inTx, c, translator) }, // statement cache int(statementCache), ) /* * ======================= * END DATABASE CONFIG * ======================= */ Poll = poller.NewPoller(30 * time.Second) }