示例#1
0
文件: main.go 项目: rajjan/qstn
func entriesNew(c *app.Context) {
	s, entry := api.EntryPost(c)

	if s != 201 {
		c.Error(s)
		return
	}

	c.JSON(entry)
}
示例#2
0
文件: main.go 项目: rajjan/qstn
func entriesRandom(c *app.Context) {
	s, entry := api.EntryRand(c)

	if s != 200 {
		c.Error(s)
		return
	}

	c.JSON(entry)
}
示例#3
0
文件: main.go 项目: rajjan/qstn
func entriesID(c *app.Context) {
	if c.Seg(2) == "random" {
		entriesRandom(c)
		return
	}

	switch c.R.Method {
	case "GET":
		entriesGet(c)
		return
	}

	c.Error(404)
}
示例#4
0
文件: main.go 项目: rajjan/qstn
func socket(c *app.Context) {
	ws, err := grader.Upgrade(c.W, c.R, nil)
	defer ws.Close()

	if err != nil {
		return
	}

	slug := c.Seg(2)
	coll := c.DB.C("entries")
	var entry models.Entry

	if _, ok := hubs[slug]; !ok {
		hubs[slug] = NewHub()
	}

	hub := hubs[slug]
	cli := hub.Add(ws)

	go cli.Ping(30 * time.Second)

	for {
		if err = ws.ReadJSON(&entry); err != nil {
			break
		}

		coll.Update(bson.M{
			"slug": slug,
		}, bson.M{
			"$set": entry,
		})

		for ws, _ := range hub.clients {
			ws.WriteJSON(entry)
		}
	}

	if len(hub.clients) == 0 {
		delete(hubs, slug)
	}

	hub.Remove(ws)
}
示例#5
0
文件: main.go 项目: rajjan/qstn
func entriesGet(c *app.Context) {
	id := c.Seg(2)

	s, entry := api.EntryGet(c, id)

	if s != 200 {
		c.Error(s)
		return
	}

	c.JSON(entry)
}
示例#6
0
文件: main.go 项目: rajjan/qstn
func entries(c *app.Context) {
	segs := c.Segs()
	size := len(segs)

	switch {
	case size > 2:
		c.Error(404)
		return
	case size == 2:
		entriesID(c)
		return
	}

	switch c.R.Method {
	case "POST":
		entriesNew(c)
		return
	}

	c.Error(404)
}
示例#7
0
文件: main.go 项目: rajjan/qstn
func catch(c *app.Context) {
	c.Error(404)
}