Esempio n. 1
0
File: neo.go Progetto: postman0/xep
func neo_server(wg *sync.WaitGroup) {
	app := neo.App()
	app.Use(logger.Log)
	app.Use(cors.Init())
	//app.Templates("tpl/*.tpl") //кэширует в этом месте и далее не загружает с диска, сука
	app.Serve("/static", "static")
	app.Get("/", func(ctx *neo.Ctx) (int, error) {
		posts.Lock()
		data := struct {
			Posts []Post
		}{}
		for i := len(posts.data) - 1; i >= 0; i-- {
			p := posts.data[i]
			data.Posts = append(data.Posts, p)
		}
		posts.Unlock()

		if t, err := loadTpl("log"); t != nil {
			//ctx.Res.Tpl("log.tpl", data)
			t.Execute(ctx.Res, data)
			return 200, nil
		} else {
			return 500, err
		}
	})
	app.Get("/stat", func(ctx *neo.Ctx) (int, error) {
		var s *CStatDoc
		var err error
		if s, err = GetStat(); err == nil {
			mm := s.Data
			total := s.Total
			data := &StatData{Total: total}
			for u, c := range mm {
				s := Stat{User: u}
				s.Count = int64(c)
				s.Perc = float64(c) / float64(total) * 100
				data.Stat = append(data.Stat, s)
			}
			sort.Stable(data)
			var t *template.Template
			if t, err = loadTpl("stat"); t != nil {
				t.Execute(ctx.Res, data)
				return 200, nil
			}
		}
		return 500, err
	})
	app.Start()
	wg.Done()
}
Esempio n. 2
0
func neo_server(wg *sync.WaitGroup) {
	app := neo.App()
	app.Use(logger.Log)
	app.Use(cors.Init())
	//app.Templates("tpl/*.tpl") //кэширует в этом месте и далее не загружает с диска, сука
	app.Serve("/static", "static")
	app.Get("/favicon.ico", func(ctx *neo.Ctx) (int, error) {
		buf := bytes.NewBuffer(nil)
		ico(buf)
		io.Copy(ctx.Res, buf)
		return 200, nil
	})
	app.Get("/", func(ctx *neo.Ctx) (int, error) {
		data := struct {
			Posts []Post
		}{}
		room.Lock()
		for i := len(room.posts) - 1; i >= 0; i-- {
			p := room.posts[i]
			data.Posts = append(data.Posts, p)
		}
		room.Unlock()

		if t, err := loadTpl("log"); t != nil {
			//ctx.Res.Tpl("log.tpl", data)
			t.Execute(ctx.Res, data)
			return 200, nil
		} else {
			return 500, err
		}
	})
	app.Get("/stat", func(ctx *neo.Ctx) (int, error) {

		conv := func(t *CStatDoc) (td *StatData) {
			mm := t.Data
			total := t.Total
			td = &StatData{Total: total}
			for u, c := range mm {
				s := Stat{User: u}
				s.Count = int64(c)
				s.Perc = float64(c) / float64(total) * 100
				td.Stat = append(td.Stat, s)
			}
			sort.Stable(td)
			return
		}

		var t, c *CStatDoc
		var err error
		if t, err = GetStat(totalId); err == nil {
			if c, err = GetStat(countId); err == nil {

				data := &TplData{}
				data.Count = conv(c)
				data.Total = conv(t)
				room.Lock()
				for _, u := range room.users {
					if !u.Active {
						data.Deads = append(data.Deads, u)
					}
				}
				room.Unlock()
				var tpl *template.Template
				if tpl, err = loadTpl("stat"); tpl != nil {
					tpl.Execute(ctx.Res, data)
					return 200, nil
				}
			}
		}
		return 500, err
	})
	app.Start()
	wg.Done()
}