func (c *Comet_RPC) WriteMsg(msg *define.Msg, r *myrpc.Reply) (err error) { msg.Dup = 0 // Fix the Expired if msg.Expired > 0 { msg.Expired = time.Now().UTC().Add(time.Duration(msg.Expired)).Unix() } // Check the user whether online. b, addr, err := redis.IsExist(msg.To_id) if !b { if err != nil { glog.Error(err) } // User is offline. err = store.Manager.InsertOfflineMsg(msg, Conf.RPC_addr, Conf.Etcd_addr) if err != nil { glog.Error(err) } else { // nil error. r.IsOk = true } return err } // User is online. if addr == Conf.RPC_addr { // Call local comet. return c.WriteOnlineMsg(msg, r) } else { // RPC. c, err := rpc.DialHTTP("tcp", addr) if err != nil { return err } reply := new(myrpc.Reply) if err = c.Call("Comet_RPC.WriteOnlineMsg", msg, reply); err != nil { return err } r.IsRe = reply.IsRe r.IsOk = reply.IsOk return nil } }