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