Esempio n. 1
0
        //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
        //ORIGINAL LINE: private boolean dispatchOneTick(HttpInterface httpInterface, TickBuilder tickBuilder) throws Exception
        private bool dispatchOneTick(HttpInterface httpInterface, TickBuilder tickBuilder)
        {
            bool     success = false;
            HttpPost post    = new HttpPost("http://" + nodeAddress + "/tick");

            abandonedTrackManager.distribute(Collections.singletonList(this));

            ByteArrayEntity entity = new ByteArrayEntity(buildRequestBody());

            post.GetEntity() = entity;

            tickBuilder.requestSize = (int)entity.ContentLength;

            CloseableHttpResponse response = httpInterface.execute(post);

            try
            {
                tickBuilder.responseCode = response.StatusLine.StatusCode;
                if (tickBuilder.responseCode != 200)
                {
                    throw new IOException("Returned an unexpected response code " + tickBuilder.responseCode);
                }

                if (connectionState.compareAndSet(ConnectionState.PENDING.id(), ConnectionState.ONLINE.id()))
                {
                    log.LogInformation("Node {} came online.", nodeAddress);
                }
                else if (connectionState.Get() != ConnectionState.ONLINE.id())
                {
                    log.LogWarning("Node {} received successful response, but had already lost control of its tracks.", nodeAddress);
                    return(false);
                }

                lastAliveTime = DateTimeHelperClass.CurrentUnixTimeMillis();

                if (!handleResponseBody(response.Entity.Content, tickBuilder))
                {
                    return(false);
                }

                success = true;
            }
            finally
            {
                if (!success)
                {
                    IOUtils.closeQuietly(response);
                }
                else
                {
                    IOUtils.closeQuietly(response.Entity.Content);
                }
            }

            return(true);
        }
Esempio n. 2
0
        //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
        //ORIGINAL LINE: private boolean processOneTick(HttpInterface httpInterface, RingBufferMath timingAverage) throws Exception
        private bool processOneTick(HttpInterface httpInterface, RingBufferMath timingAverage)
        {
            TickBuilder tickBuilder = new TickBuilder(DateTimeHelperClass.CurrentUnixTimeMillis());

            try
            {
                if (!dispatchOneTick(httpInterface, tickBuilder))
                {
                    return(false);
                }
            }
            finally
            {
                tickBuilder.endTime = DateTimeHelperClass.CurrentUnixTimeMillis();
                recordTick(tickBuilder.build(), timingAverage);
            }

            long sleepDuration = System.Math.Max((tickBuilder.startTime + 500) - tickBuilder.endTime, 10);

            System.Threading.Thread.Sleep((int)sleepDuration);
            return(true);
        }
Esempio n. 3
0
        private bool handleResponseBody(Discord.Audio.Streams.InputStream inputStream, TickBuilder tickBuilder)
        {
            CountingInputStream countingStream = new CountingInputStream(inputStream);
            DataInputStream     input          = new DataInputStream(countingStream);
            RemoteMessage       message;

            try
            {
                while ((message = mapper.decode(input)) != null)
                {
                    if (message is TrackStartResponseMessage)
                    {
                        handleTrackStartResponse((TrackStartResponseMessage)message);
                    }
                    else if (message is TrackFrameDataMessage)
                    {
                        handleTrackFrameData((TrackFrameDataMessage)message);
                    }
                    else if (message is TrackExceptionMessage)
                    {
                        handleTrackException((TrackExceptionMessage)message);
                    }
                    else if (message is NodeStatisticsMessage)
                    {
                        handleNodeStatistics((NodeStatisticsMessage)message);
                    }
                }
            }
            catch (InterruptedException)
            {
                log.LogError("Node {} processing thread was interrupted.", nodeAddress);
                System.Threading.Thread.CurrentThread.Interrupt();
                return(false);
            }
            catch (System.Exception e)
            {
                log.LogError("Error when processing response from node {}.", nodeAddress, e);
                ExceptionTools.rethrowErrors(e);
            }
            finally
            {
                tickBuilder.responseSize = countingStream.Count;
            }

            return(true);
        }