public void UpdateStreamMetadata(int streamId, StreamMetadataBindingModel metadata) { _dataLock.EnterWriteLock(); try { // TODO: Maybe later we can keep an indexed list, but for now just search Stream stream = _channels.SelectMany(c => c.Value.Streams) .Where(s => s.Key == streamId).Select(s => s.Value).FirstOrDefault(); if (stream == null) { throw new ArgumentException("Stream ID does not exist."); } stream.Metadata = metadata; stream.LastUpdateTime = DateTimeOffset.Now; } finally { _dataLock.ExitWriteLock(); } }
public IActionResult PostUpdateMetadata(string streamId, [FromBody] StreamMetadataBindingModel metadata) { int parsedStreamId; if (!(int.TryParse(streamId, out parsedStreamId))) { _logger.LogInformation("Metadata request failed: ID {stream} is not an integer", streamId); return(BadRequest("Stream ID must be an integer value.")); } try { _streamManager.UpdateStreamMetadata(parsedStreamId, metadata); _logger.LogInformation("Stream {stream} metadata updated", parsedStreamId); return(Ok()); } catch (ArgumentException e) { _logger.LogInformation("Metadata request failed: {reason}", e.Message); return(BadRequest(e.Message)); } }