Пример #1
0
func (s *messageStream) Send(event types.Event) (uint64, matrixTypes.Error) {
	s.lock.Lock()
	defer s.lock.Unlock()

	index := atomic.AddUint64(&s.max, 1) - 1
	indexed := indexedEvent{event, index}

	if currentItem, ok := s.byId[event.GetEventKey()]; ok {
		s.byIndex[currentItem.index] = nil
	}
	s.byIndex = append(s.byIndex, &indexed)
	s.byId[event.GetEventKey()] = indexed

	users, err := s.members.Users(*event.GetRoomId())
	if err != nil {
		return 0, nil
	}
	if extraUser := extraUserForEvent(event); extraUser != nil {
		l := len(users)
		allUsers := make([]types.UserId, l+1)
		copy(allUsers, users)
		allUsers[l] = *extraUser
		users = allUsers
	}
	s.asyncEventSink.Send(users, &indexed)
	return index, nil
}