Ejemplo n.º 1
0
        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!");
        }
Ejemplo n.º 2
0
        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();
            }
        }