Example #1
0
func Listen(messages chan adapter.Message) (err error) {
	cache := brain.Cache()
	me, err := client.Me()

	if err != nil {
		log.Fatalf("CAMPFIRE: could not fetch info about self: %s", err)
	}

	brain.SetIdentity(User{me})

	rooms := []*campfire.Room{}

	for _, id := range roomIds {
		room, err := client.RoomForId(id)

		if err != nil {
			log.Printf("ROOM[%d]: unable to get info on room: %s\n", id, err)
			continue
		}

		err = room.Join()

		if err != nil {
			log.Printf("ROOM[%d]: Unable to join room\n", id)
			continue
		}

		cache.Add(Room{room})
		for _, u := range room.Users {
			cache.Add(User{u})
		}

		log.Printf("ROOM[%d]: joined %s\n", id, room.Name)
		rooms = append(rooms, room)
	}

	if len(rooms) == 0 {
		log.Fatal("CAMPFIRE: No rooms joined")
	}

	rawMessages := make(chan *campfire.Message)

	for _, room := range rooms {
		go room.Stream(rawMessages).Connect()
	}

	for {
		select {
		case m := <-rawMessages:
			roomId := itoa(m.RoomId)
			userId := itoa(m.UserId)

			if !cache.Exists(adapter.UserKey(userId)) {
				user, err := client.UserForId(m.UserId)

				if err != nil {
					break
				}

				cache.Add(User{user})
			}

			messages <- &Message{
				message: m,
				room:    cache.Get(adapter.RoomKey(roomId)).(Room),
				user:    cache.Get(adapter.UserKey(userId)).(User),
			}
		}
	}

	return nil
}
Example #2
0
func (r Room) CacheKey() string {
	return adapter.RoomKey(r.Id())
}