Esempio n. 1
0
        /// <summary>
        /// Create an observable object.
        /// </summary>
        static IObservable<StreamingMessage> ReactiveBase(this StreamingApi e, StreamingType type, StreamingParameters parameters = null)
        {
            return Observable.Create<StreamingMessage>((observer, cancel) => Task.Factory.StartNew(() =>
            {
                var url = type == StreamingType.User ? "https://userstream.twitter.com/1.1/user.json" :
                          type == StreamingType.Site ? " https://sitestream.twitter.com/1.1/site.json " :
                          type == StreamingType.Filter ? "https://stream.twitter.com/1.1/statuses/filter.json" :
                          type == StreamingType.Sample ? "https://stream.twitter.com/1.1/statuses/sample.json" :
                          type == StreamingType.Firehose ? "https://stream.twitter.com/1.1/statuses/firehose.json" : "";

                cancel.ThrowIfCancellationRequested();

                using(var reader = Connect(e.IncludedTokens, parameters, type == StreamingType.Filter ? MethodType.Post : MethodType.Get, url))
                {
                    cancel.ThrowIfCancellationRequested();
                    cancel.Register(() => reader.Close());

                    foreach(var s in reader.EnumerateLines().Where(x => !string.IsNullOrEmpty(x)))
                    {
                        observer.OnNext(RawJsonMessage.Create(e.IncludedTokens, s));
                        observer.OnNext(StreamingMessage.Parse(e.IncludedTokens, s));
                    }
                }
            }, cancel, TaskCreationOptions.LongRunning, TaskScheduler.Default));
        }
Esempio n. 2
0
        public static IObservable<StreamingMessage> StartObservableStream(this StreamingApi e, StreamingType type, StreamingParameters parameters = null)
        {
            if(parameters == null)
                parameters = new StreamingParameters();

            return AccessStreamingApiAsObservableImpl(e, type, parameters.Parameters);
        }
Esempio n. 3
0
 /// <summary>
 /// Starts the stream.
 /// </summary>
 /// <returns>The observable object.</returns>
 /// <param name="e">Tokens.</param>
 /// <param name="type">Type of streaming API.</param>
 /// <param name="parameters">Parameters.</param>
 public static IObservable <StreamingMessage> StartObservableStream(this StreamingApi e, StreamingType type, StreamingParameters parameters = null)
 {
     if (parameters == null)
     {
         parameters = new StreamingParameters();
     }
     return(ReactiveBase(e, type, parameters));
 }
Esempio n. 4
0
        public static IObservable <StreamingMessage> StartObservableStream(this StreamingApi e, StreamingType type, StreamingParameters parameters = null)
        {
            if (parameters == null)
            {
                parameters = new StreamingParameters();
            }

            return(AccessStreamingApiAsObservableImpl(e, type, parameters.Parameters));
        }
Esempio n. 5
0
        /// <summary>
        /// Starts the stream.
        /// </summary>
        /// <returns>The observable object.</returns>
        /// <param name="e">Tokens.</param>
        /// <param name="type">Type of streaming API.</param>
        /// <param name="parameters">Parameters.</param>
        public static IObservable<StreamingMessage> StartObservableStream(this StreamingApi e, StreamingType type, StreamingParameters parameters = null)
        {
            if(parameters == null)
                parameters = new StreamingParameters();

            return Observable.Create<StreamingMessage>((observer, cancel) =>
            {
                var url = type == StreamingType.User ? "https://userstream.twitter.com/1.1/user.json" :
                          type == StreamingType.Site ? " https://sitestream.twitter.com/1.1/site.json " :
                          type == StreamingType.Filter ? "https://stream.twitter.com/1.1/statuses/filter.json" :
                          type == StreamingType.Sample ? "https://stream.twitter.com/1.1/statuses/sample.json" :
                          type == StreamingType.Firehose ? "https://stream.twitter.com/1.1/statuses/firehose.json" : "";

                return e.IncludedTokens.SendStreamingRequestAsync(type == StreamingType.Filter ? MethodType.Post : MethodType.Get, url, parameters.Parameters, cancel)
                    .ContinueWith(task =>
                    {
                        if(task.IsFaulted)
                            throw task.Exception.InnerException;

                        return task.Result.GetResponseStreamAsync();
                    }, cancel)
                    .Unwrap()
                    .ContinueWith(task =>
                    {
                        if(task.IsFaulted)
                            throw task.Exception.InnerException;

                        using(var reader = new StreamReader(task.Result))
                        using(var reg = cancel.Register(() => reader.Dispose()))
                        {
                            foreach(var s in reader.EnumerateLines().Where(x => !string.IsNullOrEmpty(x)))
                            {
                                observer.OnNext(RawJsonMessage.Create(e.IncludedTokens, s));
            #if !DEBUG
                                try
                                {
            #endif
                                observer.OnNext(StreamingMessage.Parse(e.IncludedTokens, s));
            #if !DEBUG
                                }
                                catch { }
            #endif
                            }
                        }
                    }, cancel, TaskContinuationOptions.LongRunning, TaskScheduler.Default)
                    .ContinueWith(task =>
                    {
                        if(task.IsFaulted)
                            throw task.Exception.InnerException;
                    }, cancel);
            });
        }
Esempio n. 6
0
 private Playing.StreamingParameters CreateStreamingParameters()
 {
     Playing.StreamingParameters result   = new StreamingParameters();
     Ares.Settings.Settings      settings = Ares.Settings.Settings.Instance;
     result.Encoding      = (StreamEncoding)settings.StreamingEncoder;
     result.Password      = settings.StreamingPassword;
     result.ServerAddress = settings.StreamingServerAddress;
     result.ServerPort    = settings.StreamingServerPort;
     result.Streamer      = StreamerType.Icecast;
     result.StreamName    = settings.StreamingStreamName;
     result.Bitrate       = (StreamingBitrate)settings.StreamingBitrate;
     result.Username      = settings.StreamingUserName;
     return(result);
 }
Esempio n. 7
0
        public HubMethodDescriptor(ObjectMethodExecutor methodExecutor, IEnumerable <IAuthorizeData> policies)
        {
            MethodExecutor = methodExecutor;

            NonAsyncReturnType = (MethodExecutor.IsMethodAsync)
                ? MethodExecutor.AsyncResultType
                : MethodExecutor.MethodReturnType;

            if (IsChannelType(NonAsyncReturnType, out var channelItemType))
            {
                IsChannel        = true;
                StreamReturnType = channelItemType;
            }

            // Take out synthetic arguments that will be provided by the server, this list will be given to the protocol parsers
            ParameterTypes = methodExecutor.MethodParameters.Where(p =>
            {
                // Only streams can take CancellationTokens currently
                if (IsStreamable && p.ParameterType == typeof(CancellationToken))
                {
                    HasSyntheticArguments = true;
                    return(false);
                }
                else if (ReflectionHelper.IsStreamingType(p.ParameterType, mustBeDirectType: true))
                {
                    if (StreamingParameters == null)
                    {
                        StreamingParameters = new List <Type>();
                    }

                    StreamingParameters.Add(p.ParameterType.GetGenericArguments()[0]);
                    HasSyntheticArguments = true;
                    return(false);
                }
                return(true);
            }).Select(p => p.ParameterType).ToArray();

            if (HasSyntheticArguments)
            {
                OriginalParameterTypes = methodExecutor.MethodParameters.Select(p => p.ParameterType).ToArray();
            }

            Policies = policies.ToArray();
        }
Esempio n. 8
0
        /// <summary>
        /// Initializes a new instance of the <see cref="WaveBank"/> class from a file for async reading.
        /// </summary>
        /// <param name="audioEngine">The engine.</param>
        /// <param name="fileName">Name of the file to load the wavebank from.</param>
        /// <param name="offset">The offset into the stream.</param>
        /// <param name="packetSize">Packet size used to load the stream.</param>
        public WaveBank(AudioEngine audioEngine, string fileName, int offset, short packetSize)
        {
            this.audioEngine = audioEngine;
            isAudioEngineReadonly = true;

            var handle = NativeFile.Create(fileName, NativeFileAccess.Read, NativeFileShare.Read | NativeFileShare.Write,
                                  IntPtr.Zero, NativeFileMode.Open,
                                  NativeFileOptions.Normal | NativeFileOptions.NoBuffering |
                                  NativeFileOptions.Overlapped | NativeFileOptions.SequentialScan, IntPtr.Zero);


            if (handle == IntPtr.Zero || handle.ToInt32() == -1)
                throw new FileNotFoundException("Unable to open the specified file.", fileName);


            var streamingParameters = new StreamingParameters {File = handle, Flags = 0, Offset = offset, PacketSize = packetSize};

            audioEngine.CreateStreamingWaveBank(streamingParameters, this);
            FileStreamHandle = new SafeFileHandle(handle, true);
        }
Esempio n. 9
0
        /// <summary>
        /// Initializes a new instance of the <see cref="WaveBank"/> class from a file for async reading.
        /// </summary>
        /// <param name="audioEngine">The engine.</param>
        /// <param name="fileName">Name of the file to load the wavebank from.</param>
        /// <param name="offset">The offset into the stream.</param>
        /// <param name="packetSize">Packet size used to load the stream.</param>
        public WaveBank(AudioEngine audioEngine, string fileName, int offset, short packetSize)
        {
            this.audioEngine      = audioEngine;
            isAudioEngineReadonly = true;

            var handle = NativeFile.Create(fileName, NativeFileAccess.Read, NativeFileShare.Read | NativeFileShare.Write,
                                           IntPtr.Zero, NativeFileMode.Open,
                                           NativeFileOptions.Normal | NativeFileOptions.NoBuffering |
                                           NativeFileOptions.Overlapped | NativeFileOptions.SequentialScan, IntPtr.Zero);


            if (handle == IntPtr.Zero || handle.ToInt32() == -1)
            {
                throw new FileNotFoundException("Unable to open the specified file.", fileName);
            }


            var streamingParameters = new StreamingParameters {
                File = handle, Flags = 0, Offset = offset, PacketSize = packetSize
            };

            audioEngine.CreateStreamingWaveBank(streamingParameters, this);
            FileStreamHandle = new SafeFileHandle(handle, true);
        }
Esempio n. 10
0
    public HubMethodDescriptor(ObjectMethodExecutor methodExecutor, IServiceProviderIsService?serviceProviderIsService, IEnumerable <IAuthorizeData> policies)
    {
        MethodExecutor = methodExecutor;

        NonAsyncReturnType = (MethodExecutor.IsMethodAsync)
            ? MethodExecutor.AsyncResultType !
            : MethodExecutor.MethodReturnType;

        foreach (var returnType in NonAsyncReturnType.GetInterfaces().Concat(NonAsyncReturnType.AllBaseTypes()))
        {
            if (!returnType.IsGenericType)
            {
                continue;
            }

            var openReturnType = returnType.GetGenericTypeDefinition();

            if (openReturnType == typeof(IAsyncEnumerable <>))
            {
                StreamReturnType = returnType.GetGenericArguments()[0];
                _makeCancelableEnumeratorMethodInfo = MakeCancelableAsyncEnumeratorMethod;
                break;
            }

            if (openReturnType == typeof(ChannelReader <>))
            {
                StreamReturnType = returnType.GetGenericArguments()[0];
                _makeCancelableEnumeratorMethodInfo = MakeAsyncEnumeratorFromChannelMethod;
                break;
            }
        }

        // Take out synthetic arguments that will be provided by the server, this list will be given to the protocol parsers
        ParameterTypes = methodExecutor.MethodParameters.Where((p, index) =>
        {
            // Only streams can take CancellationTokens currently
            if (IsStreamResponse && p.ParameterType == typeof(CancellationToken))
            {
                HasSyntheticArguments = true;
                return(false);
            }
            else if (ReflectionHelper.IsStreamingType(p.ParameterType, mustBeDirectType: true))
            {
                if (StreamingParameters == null)
                {
                    StreamingParameters = new List <Type>();
                }

                StreamingParameters.Add(p.ParameterType.GetGenericArguments()[0]);
                HasSyntheticArguments = true;
                return(false);
            }
            else if (p.CustomAttributes.Any(a => typeof(IFromServiceMetadata).IsAssignableFrom(a.AttributeType)) ||
                     serviceProviderIsService?.IsService(p.ParameterType) == true)
            {
                if (index >= 64)
                {
                    throw new InvalidOperationException(
                        "Hub methods can't use services from DI in the parameters after the 64th parameter.");
                }
                _isServiceArgument   |= (1UL << index);
                HasSyntheticArguments = true;
                return(false);
            }
            return(true);
        }).Select(p => p.ParameterType).ToArray();

        if (HasSyntheticArguments)
        {
            OriginalParameterTypes = methodExecutor.MethodParameters.Select(p => p.ParameterType).ToArray();
        }

        Policies = policies.ToArray();
    }
Esempio n. 11
0
        /// <summary>
        /// Create an observable object.
        /// </summary>
        static IObservable <StreamingMessage> ReactiveBase(this StreamingApi e, StreamingType type, StreamingParameters parameters = null)
        {
            return(Observable.Create <StreamingMessage>((observer, cancel) => Task.Factory.StartNew(() =>
            {
                var url = type == StreamingType.User ? "https://userstream.twitter.com/1.1/user.json" :
                          type == StreamingType.Site ? " https://sitestream.twitter.com/1.1/site.json " :
                          type == StreamingType.Filter ? "https://stream.twitter.com/1.1/statuses/filter.json" :
                          type == StreamingType.Sample ? "https://stream.twitter.com/1.1/statuses/sample.json" :
                          type == StreamingType.Firehose ? "https://stream.twitter.com/1.1/statuses/firehose.json" : "";

                cancel.ThrowIfCancellationRequested();

                using (var reader = Connect(e.IncludedTokens, parameters, type == StreamingType.Filter ? MethodType.Post : MethodType.Get, url))
                {
                    cancel.ThrowIfCancellationRequested();
                    cancel.Register(() => reader.Close());

                    foreach (var s in reader.EnumerateLines().Where(x => !string.IsNullOrEmpty(x)))
                    {
                        observer.OnNext(RawJsonMessage.Create(e.IncludedTokens, s));
                        observer.OnNext(StreamingMessage.Parse(e.IncludedTokens, s));
                    }
                }
            }, cancel, TaskCreationOptions.LongRunning, TaskScheduler.Default)));
        }
Esempio n. 12
0
 /// <summary>
 /// Get a stream from the specified url
 /// </summary>
 static StreamReader Connect(TokensBase e, StreamingParameters parameters, MethodType type, string url)
 {
     return(new StreamReader(e.SendRequest(type, url, parameters.Parameters)));
 }
Esempio n. 13
0
        public HubMethodDescriptor(ObjectMethodExecutor methodExecutor, IEnumerable <IAuthorizeData> policies)
        {
            MethodExecutor = methodExecutor;

            NonAsyncReturnType = (MethodExecutor.IsMethodAsync)
                ? MethodExecutor.AsyncResultType !
                : MethodExecutor.MethodReturnType;

            foreach (var returnType in NonAsyncReturnType.GetInterfaces().Concat(NonAsyncReturnType.AllBaseTypes()))
            {
                if (!returnType.IsGenericType)
                {
                    continue;
                }

                var openReturnType = returnType.GetGenericTypeDefinition();

                if (openReturnType == typeof(IAsyncEnumerable <>))
                {
                    StreamReturnType = returnType.GetGenericArguments()[0];
                    _makeCancelableEnumeratorMethodInfo = MakeCancelableAsyncEnumeratorMethod;
                    break;
                }

                if (openReturnType == typeof(ChannelReader <>))
                {
                    StreamReturnType = returnType.GetGenericArguments()[0];
                    _makeCancelableEnumeratorMethodInfo = MakeAsyncEnumeratorFromChannelMethod;
                    break;
                }
            }

            // Take out synthetic arguments that will be provided by the server, this list will be given to the protocol parsers
            ParameterTypes = methodExecutor.MethodParameters.Where(p =>
            {
                // Only streams can take CancellationTokens currently
                if (IsStreamResponse && p.ParameterType == typeof(CancellationToken))
                {
                    HasSyntheticArguments = true;
                    return(false);
                }
                else if (ReflectionHelper.IsStreamingType(p.ParameterType, mustBeDirectType: true))
                {
                    if (StreamingParameters == null)
                    {
                        StreamingParameters = new List <Type>();
                    }

                    StreamingParameters.Add(p.ParameterType.GetGenericArguments()[0]);
                    HasSyntheticArguments = true;
                    return(false);
                }
                return(true);
            }).Select(p => p.ParameterType).ToArray();

            if (HasSyntheticArguments)
            {
                OriginalParameterTypes = methodExecutor.MethodParameters.Select(p => p.ParameterType).ToArray();
            }

            Policies = policies.ToArray();
        }
Esempio n. 14
0
        /// <summary>
        /// Starts the stream.
        /// </summary>
        /// <returns>The observable object.</returns>
        /// <param name="e">Tokens.</param>
        /// <param name="type">Type of streaming API.</param>
        /// <param name="parameters">Parameters.</param>
        public static IObservable <StreamingMessage> StartObservableStream(this StreamingApi e, StreamingType type, StreamingParameters parameters = null)
        {
            if (parameters == null)
            {
                parameters = new StreamingParameters();
            }

            return(Observable.Create <StreamingMessage>((observer, cancel) =>
            {
                var url = type == StreamingType.User ? "https://userstream.twitter.com/1.1/user.json" :
                          type == StreamingType.Site ? " https://sitestream.twitter.com/1.1/site.json " :
                          type == StreamingType.Filter ? "https://stream.twitter.com/1.1/statuses/filter.json" :
                          type == StreamingType.Sample ? "https://stream.twitter.com/1.1/statuses/sample.json" :
                          type == StreamingType.Firehose ? "https://stream.twitter.com/1.1/statuses/firehose.json" : "";

                return e.IncludedTokens.SendStreamingRequestAsync(type == StreamingType.Filter ? MethodType.Post : MethodType.Get, url, parameters.Parameters, cancel)
                .ContinueWith(task =>
                {
                    if (task.IsFaulted)
                    {
                        task.Exception.InnerException.Rethrow();
                    }

                    return task.Result.GetResponseStreamAsync();
                }, cancel)
                .Unwrap()
                .ContinueWith(task =>
                {
                    if (task.IsFaulted)
                    {
                        task.Exception.InnerException.Rethrow();
                    }

                    try
                    {
                        using (var reader = new StreamReader(task.Result))
                            using (var reg = cancel.Register(() => reader.Dispose()))
                            {
                                foreach (var s in reader.EnumerateLines().Where(x => !string.IsNullOrEmpty(x)))
                                {
#if !DEBUG
                                    try
                                    {
#endif
                                    observer.OnNext(StreamingMessage.Parse(s));
#if !DEBUG
                                }
                                catch
                                {
                                    observer.OnNext(RawJsonMessage.Create(s));
                                }
#endif
                                }
                            }
                    }
                    finally
                    {
                        cancel.ThrowIfCancellationRequested();
                    }
                }, cancel, TaskContinuationOptions.LongRunning, TaskScheduler.Default);
            }));
        }
Esempio n. 15
0
 /// <summary>
 /// Get a stream from the specified url
 /// </summary>
 static StreamReader Connect(TokensBase e, StreamingParameters parameters, MethodType type, string url)
 {
     return new StreamReader(e.SendRequest(type, url, parameters.Parameters));
 }
Esempio n. 16
0
 /// <summary>
 /// Starts the stream.
 /// </summary>
 /// <returns>The observable object.</returns>
 /// <param name="e">Tokens.</param>
 /// <param name="type">Type of streaming API.</param>
 /// <param name="parameters">Parameters.</param>
 public static IObservable<StreamingMessage> StartObservableStream(this StreamingApi e, StreamingType type, StreamingParameters parameters = null)
 {
     if(parameters == null)
         parameters = new StreamingParameters();
     return ReactiveBase(e, type, parameters);
 }