gocon:http://connpass.com/event/1906/
に行きたかったんですが
どんぴしゃりに風邪を引いてしまい結局キャンセルしてしまいました。申し訳ないです
全員いけるようになってたっぽいのでギリギリまで粘ってみたのですがOTL
というわけで、goconで作ろうと思ってたものの一部を書いてみた。
gae/gのmemcacheの使い方が要領えないなーともくもくしてたんですが、それっぽくなってきた?
以降やりたい&やろうと思っていること
に行きたかったんですが
全員いけるようになってたっぽいのでギリギリまで粘ってみたのですがOTL
というわけで、goconで作ろうと思ってたものの一部を書いてみた。
■gist
https://gist.github.com/mogeta/5413534■github
https://github.com/mogeta/golang_channelAPI_example_dartgae/gのmemcacheの使い方が要領えないなーともくもくしてたんですが、それっぽくなってきた?
以降やりたい&やろうと思っていること
- 動く部分だけ最低限すぎるのでエラー吐くとかは最低限書こう
- memcacheでユーザー管理するコードをライブラリ化する。(仕方よくわかってない。教えてplz
- テストコードの検討。gae/g起動して、url叩くようなテスト?
- dartでjsonのやり取り。ビジュアル的に映えるアプリ。
■ 使い方
func connected(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
key := r.FormValue("from")
users := getUsers("users", c)
users.RegistUser(key)
c.Infof("connected")
c.Infof("%s", key)
}
func disconnected(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
key := r.FormValue("from")
users := getUsers("users", c)
users.DeleteUser(key)
c.Infof("disconnected")
c.Infof("%s", key)
}
■ code
package channelExample
import (
"appengine"
"appengine/memcache"
"time"
)
type Users struct {
Name string
context appengine.Context
member map[string]int32
}
func (u *Users) loadUserList() {
_, err := memcache.JSON.Get(u.context, u.Name, &u.member)
if err != nil && err != memcache.ErrCacheMiss {
u.context.Infof("warning")
return
}
}
func (u *Users) saveUserList() {
_ = memcache.JSON.Set(u.context, &memcache.Item{
Key: u.Name, Object: u.member,
})
}
func (u *Users) RegistUser(key string) {
u.loadUserList()
u.member[key] = int32(time.Now().Unix())
u.saveUserList()
}
func (u *Users) DeleteUser(key string) {
u.loadUserList()
delete(u.member, key)
u.saveUserList()
}
func (u *Users) checkExpire() {
now := int32(time.Now().Unix())
for i, j := range u.member {
if now-j > 60*60*2 {
delete(u.member, i)
}
}
}
func getUsers(s string, c appengine.Context) *Users {
data := &Users{
Name: s,
context: c,
member: make(map[string]int32)}
data.loadUserList()
return data
}
0 件のコメント :
コメントを投稿