static void Main(string[] args) { Console.WriteLine("Hello World!"); CommandLine.Parser.Default.ParseArguments <Options>(args) .WithParsed <Options>(opts => options = opts) .WithNotParsed <Options>(errs => System.Environment.Exit(-1)); myStreamSource = new StreamSource { DisplayName = "Radio Energy Nuremberg", FilePrefix = "NRJ_Nuremberg", StreamUrl = "http://energyradio.de/nuernberg" }; myRipper = new Mp3StreamRipper(); myRipper.StartRip(myStreamSource); var fileLocation = GetFileLocation(); Console.WriteLine($"Writing to {fileLocation}"); myRecorder = new Mp3StreamRecorder((Mp3StreamRipper)myRipper, fileLocation); myRecorder.StartRecord(); var sw = new Stopwatch(); sw.Start(); do { Thread.Sleep(1000); }while (sw.Elapsed.TotalMinutes < options.Duration); myRecorder.StopRecord(); myRipper.StopRip(); Console.WriteLine("End World!"); }
void Start() { if (m_StreamSettings == null) { Debug.LogErrorFormat("No Stream Setting set on {0}. Unable to run Server.", this); enabled = false; return; } m_StreamRecorder = m_StreamRecorderOverride ? m_StreamRecorderOverride.GetComponentInChildren <IStreamRecorder>() : GetComponentInChildren <IStreamRecorder>(); if (m_StreamRecorder == null) { Debug.LogWarningFormat("No Stream Recorder found in {0}. You will not be able to record anything.", this); } m_TakeNumber = 0; Debug.Log("Possible IP addresses:"); IPAddress[] addresses; try { addresses = Dns.GetHostEntry(Dns.GetHostName()).AddressList; } catch (Exception) { Debug.LogWarning("DNS-based method failed, using network interfaces to find local IP"); var addressList = new List <IPAddress>(); foreach (var networkInterface in NetworkInterface.GetAllNetworkInterfaces()) { if (networkInterface.NetworkInterfaceType == NetworkInterfaceType.Loopback) { continue; } switch (networkInterface.OperationalStatus) { case OperationalStatus.Up: case OperationalStatus.Unknown: foreach (var ip in networkInterface.GetIPProperties().UnicastAddresses) { addressList.Add(ip.Address); } break; } } addresses = addressList.ToArray(); } foreach (var address in addresses) { if (address.AddressFamily != AddressFamily.InterNetwork) { continue; } if (IPAddress.IsLoopback(address)) { continue; } var connectionAddress = address; Debug.Log(connectionAddress); Socket listenSocket; try { var endPoint = new IPEndPoint(connectionAddress, m_Port); listenSocket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); listenSocket.Bind(endPoint); listenSocket.Listen(k_MaxConnections); m_ListenSockets.Add(listenSocket); m_LastFrameNum = -1; m_Running = true; } catch (Exception e) { Debug.LogErrorFormat("Error creating listen socket on address {0} : {1}", connectionAddress, e); continue; } new Thread(() => { // Block until timeout or successful connection var socket = listenSocket.Accept(); // If another socket has already accepted a connection, exit the thread if (m_TransferSocket != null) { return; } m_TransferSocket = socket; Debug.Log(string.Format("Client connected on {0}", connectionAddress)); var frameNumArray = new int[1]; var bufferSize = m_StreamSettings.bufferSize; while (m_Running) { if (streamReader == null) { continue; } var source = streamReader.streamSource; if (socket.Connected && source != null && source.Equals(this)) { try { if (m_StreamSettings == null || m_StreamSettings.bufferSize != bufferSize) { Debug.LogError("Settings changed while connnected. Please exit play mode before changing settings"); break; } var buffer = m_UnusedBuffers.Count == 0 ? new byte[bufferSize] : m_UnusedBuffers.Dequeue(); for (var i = 0; i < bufferSize; i++) { buffer[i] = 0; } socket.Receive(buffer); // Receive can fail and return an empty buffer if (buffer[0] == m_StreamSettings.ErrorCheck) { m_BufferQueue.Enqueue(buffer); if (recording) { m_StreamRecorder.AddDataToRecording(buffer); } Buffer.BlockCopy(buffer, m_StreamSettings.FrameNumberOffset, frameNumArray, 0, m_StreamSettings.FrameNumberSize); var frameNum = frameNumArray[0]; if (streamReader.verboseLogging && m_LastFrameNum != frameNum - 1) { Debug.LogFormat("Dropped frame {0} (last frame: {1}) ", frameNum, m_LastFrameNum); } m_LastFrameNum = frameNum; } } catch (Exception e) { // Expect an exception on the last frame when OnDestroy closes the socket if (m_Running) { Debug.LogError(e.Message + "\n" + e.StackTrace); } } } if (m_BufferQueue.Count > k_MaxBufferQueue) { m_UnusedBuffers.Enqueue(m_BufferQueue.Dequeue()); } Thread.Sleep(1); } socket.Disconnect(false); }).Start(); } }