func (u *User) GetServers() (servers []*common.IRCServer) { err := common.RedisSliceLoad(u.ServerListKey(), &servers) if err != nil { log.Println("GetServers: ", err) } return }
func (u *User) GetChannels() (channels []*common.IRCChannel) { err := common.RedisSliceLoad(u.ChannelListKey(), &channels) if err != nil { log.Println("GetChannels: ", err) return nil } return }
func LoadDb() { r := common.DefaultRedisPool().Get() defer r.Close() // 서버 목록들을 읽어와서 IRCClient를 생성하고 접속 reply, err := redis.Values(r.Do("KEYS", "servers:*")) if err != nil { log.Println("LoadDb: ", err) os.Exit(1) } for _, key := range reply { key, _ := redis.String(key, nil) var servers []*common.IRCServer err = common.RedisSliceLoad(key, &servers) if err != nil { log.Println("LoadDb: ", err) os.Exit(1) } for _, server := range servers { server.Active = false ircMgr.register <- NewClient(server) } } // 채널 목록을 읽어와서 채널을 추가 reply, err = redis.Values(r.Do("KEYS", "channels:*")) if err != nil { log.Println("LoadDb: ", err) os.Exit(1) } for _, key := range reply { key, _ := redis.String(key, nil) var channels []*common.IRCChannel err = common.RedisSliceLoad(key, &channels) if err != nil { log.Println("LoadDb: ", err) os.Exit(1) } for _, channel := range channels { c := ircMgr.GetClient(channel.UserId, channel.ServerId) channel.Joined = false c.AddChannel(channel.Name) } } }
func (um *UserManager) SendPushMessage(userId string, packet *Packet) error { _tokens := make([]string, 0) tokenListKey := fmt.Sprintf("tokens:%s", userId) err := common.RedisSliceLoad(tokenListKey, &_tokens) if err != nil { return err } tokens := make(map[string]bool) for _, token := range _tokens { tokens[token] = true } user, _ := um.GetConnectedUser(userId) if user != nil { // websocket connection으로 푸시 전송 시도 ignoreTokens := user.SendPushMessage(packet) for token, _ := range ignoreTokens { delete(tokens, token) } } if len(tokens) != 0 { // 푸시 Agent로 푸시 전송 시도 pushMessage := &PushMessage{ UserId: userId, PushTokens: make([]string, len(tokens)), Payload: packet, } i := 0 for token, _ := range tokens { pushMessage.PushTokens[i] = token i++ } manager.push.Send <- pushMessage } return nil }