private void DisposeWaveIn() { if (waveIn != null) { waveIn.StopRecording(); waveIn.Dispose(); waveIn = null; buffer = null; writeIndex = 0; } }
public override void Init(int DeviceID = 0, int channels = 2, int samplerate = 44100, int bufferMax = (44100 * 3)) { base.Init(DeviceID, channels, samplerate, bufferMax); DisposeWaveIn(); waveIn = new WaveIn() { DeviceNumber = DeviceID }; waveIn.WaveFormat = new WaveFormat(samplerate, 16, channels); waveIn.BufferMilliseconds = 30; waveIn.DataAvailable += WaveIn_DataAvailable; result = new float[bufferMax]; buffer = new Collections.CircularBuffer<float>(bufferMax); waveIn.StartRecording(); e = new Thread(new ThreadStart(EventThread)); Run = true; e.Start(); }
/// <summary> /// On web socket context. /// </summary> /// <param name="webSocketContext">The asp net web socket context.</param> private async void OnChatWebSocketContext(System.Web.WebSockets.AspNetWebSocketContext context) { WebSocket webSocket = null; Nequeo.Net.WebSockets.WebSocketMember member = null; Nequeo.Collections.CircularBuffer <byte> requestBuffer = null; Nequeo.IO.Stream.StreamBufferBase requestStream = null; try { // Get the current web socket. webSocket = context.WebSocket; // Create the web socket member and // add to the member collection. member = new Nequeo.Net.WebSockets.WebSocketMember(webSocket); AddMember(member); // Holds the receive data. bool hasBeenFound = false; byte[] store = new byte[0]; byte[] receiveBuffer = new byte[READ_BUFFER_SIZE]; // Create the stream buffers. requestBuffer = new Collections.CircularBuffer <byte>(base.RequestBufferCapacity); requestStream = new Nequeo.IO.Stream.StreamBufferBase(requestBuffer); requestBuffer.RemoveItemsWritten = true; // Create the current chat state. Chat.ChatWebSocketState chatState = new Chat.ChatWebSocketState() { Member = member, RequestStream = requestStream, WebSocket = webSocket }; CancellationTokenSource receiveCancelToken = new CancellationTokenSource(); // While the WebSocket connection remains open run a // simple loop that receives data and sends it back. while (webSocket.State == WebSocketState.Open) { // Receive the next set of data. ArraySegment <byte> arrayBuffer = new ArraySegment <byte>(receiveBuffer); WebSocketReceiveResult receiveResult = await webSocket.ReceiveAsync(arrayBuffer, receiveCancelToken.Token); // Assign the member properties. member.ReceiveResult = receiveResult; member.TimeoutTime = DateTime.Now; requestStream.Write(receiveBuffer, 0, receiveResult.Count); // If the connection has been closed. if (receiveResult.MessageType == WebSocketMessageType.Close) { // Close the connection. member.Close(); break; } else { // Store the data. byte[] temp = null; if (!hasBeenFound) { temp = store.CombineParallel(receiveBuffer); // Find the end of the data. hasBeenFound = Nequeo.Net.Utility.IsParse2CRLF(temp); // Store the data until the end. store = temp; temp = null; } else { // If this is the end of the message. if (receiveResult.EndOfMessage) { // Clear the store. store = null; store = new byte[0]; hasBeenFound = false; string resource = ""; // Get the request headers. List <Nequeo.Model.NameValue> headers = base.ParseHeaders(requestStream, out resource, base.HeaderTimeout); // All headers have been found. if (headers != null) { // Get the execution member. // Set the calling member. string executionMember = headers.First(m => m.Name.ToUpper().Contains("MEMBER")).Value; string actionName = headers.First(m => m.Name.ToUpper().Contains("ACTIONNAME")).Value; // Assign the values. chatState.Headers = headers; chatState.ExecutionMember = executionMember; chatState.ErrorCode = new Exceptions.ErrorCodeException("OK", 200); try { // Validate the current user token. bool isTokenValid = ValidateToken(chatState); } catch (Exceptions.ErrorCodeException exc) { // Get the error code. chatState.ErrorCode = exc; } catch (Exception ex) { // Internal error. chatState.ErrorCode = new Exceptions.ErrorCodeException(ex.Message, 500); } // Send a message back to the client indicating that // the message was recivied and was sent. await webSocket.SendAsync(new ArraySegment <byte>( CreateResponse(chatState.ErrorCode.ErrorCode, true, executionMember, actionName, chatState.ErrorCode.Message)), WebSocketMessageType.Binary, true, CancellationToken.None); } } } } } // Cancel the receive request. if (webSocket.State != WebSocketState.Open) { receiveCancelToken.Cancel(); } } catch { } finally { // If a member context exists. if (member != null) { try { // Remove the member context // from the collection. RemoveMember(member); } catch { } member = null; } // Clean up by disposing the WebSocket. if (webSocket != null) { webSocket.Dispose(); } if (requestBuffer != null) { requestBuffer.Dispose(); } if (requestStream != null) { requestStream.Dispose(); } if (_communication != null) { try { // Remove the client from the communication service. _communication.RemoveClient(member.UniqueIdentifier, base.ServiceName, _machineName, null, actionName: member.UniqueIdentifier); } catch { } } } }