func (db *roomDb) SetRoomState(roomId types.RoomId, userId types.UserId, content types.TypedContent, stateKey string) (*matrixTypes.State, matrixTypes.Error) { db.roomsLock.RLock() defer db.roomsLock.RUnlock() room := db.rooms[roomId] if room == nil { return nil, matrixTypes.NotFoundError("room '" + roomId.String() + "' doesn't exist") } var eventId = types.DeriveEventId(utils.RandomString(16), types.Id(userId)) stateId := stateId{content.GetEventType(), stateKey} state := new(matrixTypes.State) state.EventId = eventId state.RoomId = roomId state.UserId = userId state.EventType = content.GetEventType() state.StateKey = stateKey state.Timestamp = types.Timestamp{time.Now()} state.Content = content state.OldState = (*matrixTypes.OldState)(room.states[stateId]) room.stateLock.Lock() defer room.stateLock.Unlock() room.states[stateId] = state return state, nil }
func (s roomService) sendMessage( room ct.RoomId, user ct.UserId, content types.TypedContent, ) (*types.Message, types.Error) { log.Printf("Sending message: %#v, %#v, %#v, %#v", room, user, content) message := new(types.Message) message.EventId = ct.DeriveEventId(utils.RandomString(16), ct.Id(user)) message.RoomId = room message.UserId = user message.EventType = content.GetEventType() message.Timestamp = ct.Timestamp{time.Now()} message.Content = content _, err := s.eventSink.Send(message) if err != nil { return nil, err } return message, nil }