// GetOfflineMsg get offline mesage http handler. func GetOfflineMsg0(w http.ResponseWriter, r *http.Request) { if r.Method != "GET" { http.Error(w, "Method Not Allowed", 405) return } params := r.URL.Query() key := params.Get("key") midStr := params.Get("mid") callback := params.Get("callback") res := map[string]interface{}{"ret": app.OK, "msg": "ok"} defer app.RetWrite(w, r, res, callback, time.Now()) if key == "" || midStr == "" { res["ret"] = app.ParamErr return } mid, err := strconv.ParseInt(midStr, 10, 64) if err != nil { res["ret"] = app.ParamErr logger.Errorf("strconv.ParseInt(\"%s\", 10, 64) error(%v)", midStr, err) return } // RPC get offline messages reply := &myrpc.MessageGetResp{} args := &myrpc.MessageGetPrivateArgs{MsgId: mid, Key: key} client := myrpc.MessageRPC.Get() if client == nil { res["ret"] = app.InternalErr return } if err := client.Call(myrpc.MessageServiceGetPrivate, args, reply); err != nil { logger.Errorf("myrpc.MessageRPC.Call(\"%s\", \"%v\", reply) error(%v)", myrpc.MessageServiceGetPrivate, args, err) res["ret"] = app.InternalErr return } omsgs := []string{} opmsgs := []string{} for _, msg := range reply.Msgs { omsg, err := msg.OldBytes() if err != nil { res["ret"] = app.InternalErr return } omsgs = append(omsgs, string(omsg)) } if len(omsgs) == 0 { return } res["data"] = map[string]interface{}{"msgs": omsgs, "pmsgs": opmsgs} return }
// GetTime get server time http handler. func GetTime0(w http.ResponseWriter, r *http.Request) { if r.Method != "GET" { http.Error(w, "Method Not Allowed", 405) return } params := r.URL.Query() callback := params.Get("callback") res := map[string]interface{}{"ret": app.OK, "msg": "ok"} now := time.Now() defer app.RetWrite(w, r, res, callback, now) res["data"] = map[string]interface{}{"timeid": now.UnixNano() / 100} return }
// GetServer handle for server get func GetServer0(w http.ResponseWriter, r *http.Request) { if r.Method != "GET" { http.Error(w, "Method Not Allowed", 405) return } params := r.URL.Query() key := params.Get("key") callback := params.Get("callback") protoStr := params.Get("proto") res := map[string]interface{}{"ret": app.OK, "msg": "ok"} defer app.RetWrite(w, r, res, callback, time.Now()) if key == "" { res["ret"] = app.ParamErr return } proto, err := strconv.Atoi(protoStr) if err != nil { logger.Errorf("strconv.Atoi(\"%s\") error(%v)", protoStr, err) res["ret"] = app.ParamErr return } // Match a push-server with the value computed through ketama algorithm node := myrpc.GetComet(key) if node == nil { res["ret"] = app.NotFoundServer return } addr := node.Addr[proto] if addr == nil || len(addr) == 0 { res["ret"] = app.NotFoundServer return } server := "" // Select the best ip if app.Conf.Router != "" { server = routerCN.SelectBest(r.RemoteAddr, addr) logger.Tracef("select the best ip:\"%s\" match with remoteAddr:\"%s\" , from ip list:\"%v\"", server, r.RemoteAddr, addr) } if server == "" { logger.Tracef("remote addr: \"%s\" chose the ip: \"%s\"", r.RemoteAddr, addr[0]) server = addr[0] } res["data"] = map[string]interface{}{"server": server} return }