private bool sendMessage(OutgoingMessage message) { Debug.Assert(_state < StateClosed); if(_sendStreams.Count > 0) { message.adopt(); _sendStreams.AddLast(message); return false; } // // Attempt to send the message without blocking. If the send blocks, we use // asynchronous I/O or we request the caller to call finishSendMessage() outside // the synchronization. // Debug.Assert(!message.prepared); IceInternal.BasicStream stream = message.stream; message.stream = doCompress(stream, message.compress); message.stream.prepareWrite(); message.prepared = true; if(message.outAsync != null) { IceInternal.TraceUtil.trace("sending asynchronous request", stream, _logger, _traceLevels); } else { IceInternal.TraceUtil.traceSend(stream, _logger, _traceLevels); } // // Send the message without blocking. // if(_observer != null) { observerStartWrite(message.stream.getBuffer()); } int op = write(message.stream.getBuffer()); if(op == 0) { if(_observer != null) { observerFinishWrite(message.stream.getBuffer()); } message.sent(); if(_acmLastActivity > -1) { _acmLastActivity = IceInternal.Time.currentMonotonicTimeMillis(); } return true; } message.adopt(); _writeStream.swap(message.stream); _sendStreams.AddLast(message); scheduleTimeout(op); _threadPool.register(this, op); return false; }
private bool sendMessage(OutgoingMessage message) { Debug.Assert(_state < StateClosed); if(_sendStreams.Count > 0) { message.adopt(); _sendStreams.Enqueue(message); return false; } // // Attempt to send the message without blocking. If the send blocks, we use // asynchronous I/O or we request the caller to call finishSendMessage() outside // the synchronization. // Debug.Assert(!message.prepared); IceInternal.BasicStream stream = message.stream; message.stream = doCompress(stream, message.compress); message.stream.prepareWrite(); message.prepared = true; if(message.outAsync != null) { IceInternal.TraceUtil.trace("sending asynchronous request", stream, _logger, _traceLevels); } else { IceInternal.TraceUtil.traceSend(stream, _logger, _traceLevels); } if(_observer != null) { observerStartWrite(message.stream.pos()); } if(_transceiver.write(message.stream.getBuffer())) { if(_observer != null) { observerFinishWrite(message.stream.pos()); } message.sent(this, false); if(_acmTimeout > 0) { _acmAbsoluteTimeoutMillis = IceInternal.Time.currentMonotonicTimeMillis() + _acmTimeout * 1000; } return true; } message.adopt(); _writeStream.swap(message.stream); _sendStreams.Enqueue(message); scheduleTimeout(IceInternal.SocketOperation.Write, _endpoint.timeout()); _threadPool.register(this, IceInternal.SocketOperation.Write); return false; }