예제 #1
0
        public Task <ActionResult <string> > Get(string room, [FromQuery] StreamQuery query = null)
        {
            if (query == null)
            {
                query = new StreamQuery();
            }

            return(HandleException(async() => (await GetStreamResult(room, query)).data));
        }
예제 #2
0
        protected async Task <StreamResult> GetStreamResult(string room, StreamQuery query = null)
        {
            //This will throw an exception if there's no GetItem association, that should be good enough.
            if (query?.readonlykey == true)
            {
                room = readonlyNames.GetItem(room);
            }

            if (!IsRoomAcceptable(room))
            {
                throw new InvalidOperationException("Room name has invalid characters! Try something simpler!");
            }

            var s = rooms.GetStream(room);
            var r = readonlyNames.GetLink(room);

            var result = new StreamResult()
            {
                limit       = rooms.Config.StreamDataLimit,
                used        = s.Data.Length,
                readonlykey = r,
                signalled   = 0
            };

            if (query != null)
            {
                if (query.nonblocking)
                {
                    result.data = rooms.GetData(s, query.start, query.count);
                }
                else
                {
                    var data = await rooms.GetDataWhenReady(s, query.start, query.count);

                    result.data = data.Data;

                    if (data.SignalData != null)
                    {
                        result.signalled = data.SignalData.ListenersBeforeSignal;
                    }
                }
            }

            return(result);
        }
예제 #3
0
        protected StreamQuery CreateDownloadQuery()
        {
            var downloadQuery = new StreamQuery(Client).Uri(Item.GetObjectUri()).Action("Download");

            if (Config != null && Config.RangeRequest != null)
            {
                if (!Config.RangeRequest.End.HasValue)
                {
                    downloadQuery.AddHeader("Range", string.Format("bytes={0}", Config.RangeRequest.Begin.GetValueOrDefault()));
                }
                else
                {
                    downloadQuery.AddHeader("Range",
                                            string.Format("bytes={0}-{1}", Config.RangeRequest.Begin.GetValueOrDefault(),
                                                          Config.RangeRequest.End.GetValueOrDefault()));
                }
            }

            return(downloadQuery as StreamQuery);
        }
예제 #4
0
        protected StreamQuery CreateDownloadQuery()
        {
            var downloadQuery = new StreamQuery(Client).Uri(Item.GetObjectUri()).Action("Download");

            if (Config != null && Config.RangeRequest != null)
            {
                if (!Config.RangeRequest.End.HasValue)
                {
                    downloadQuery.AddHeader("Range", string.Format("bytes={0}", Config.RangeRequest.Begin.GetValueOrDefault()));
                }
                else
                {
                    downloadQuery.AddHeader("Range",
                        string.Format("bytes={0}-{1}", Config.RangeRequest.Begin.GetValueOrDefault(),
                            Config.RangeRequest.End.GetValueOrDefault()));
                }
            }

            return downloadQuery as StreamQuery;
        }
예제 #5
0
 public async Task <ActionResult <StreamResult> > GetJson(string room, [FromQuery] StreamQuery query = null)
 {
     return(await HandleException(async() => await GetStreamResult(room, query)));
 }