/// <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)); }
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); }
/// <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)); }
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)); }
/// <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); }); }
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); }
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(); }
/// <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); }
/// <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); }
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(); }
/// <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))); }
/// <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))); }
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(); }
/// <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); })); }
/// <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)); }
/// <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); }