protected override void SendAsync(Threads.Result result, byte[] data) { try { if (client != null) { Converter32 c = new Converter32(data.Length); writeBuffer[0] = c.Byte1; writeBuffer[1] = c.Byte2; writeBuffer[2] = c.Byte3; writeBuffer[3] = c.Byte4; stream.BeginWrite(writeBuffer, 0, writeBuffer.Length, FinalizeSendLength, new SendState { result = result, data = data }); } else { throw new ArgumentNullException("client", "The connection tcpClient is not defined."); } } catch (Exception e) { result.Complete(e); } }
protected override void SendAsync(Threads.Result result, BufferPool.Buffer data, bool dispose_buffer = true) { try { if (Connected()) { Converter32 c = new Converter32(data.Size); writeBuffer.Data[0] = c.Byte1; writeBuffer.Data[1] = c.Byte2; writeBuffer.Data[2] = c.Byte3; writeBuffer.Data[3] = c.Byte4; BeginSend(writeBuffer.Data, writeBuffer.Data.Length, FinalizeSendLength, new SendState(result, data, dispose_buffer)); } else { throw new ArgumentNullException("client", "The connection is not opened."); } } catch (Exception e) { result.Complete(e); } }
protected void Worker() { WaitHandle[] wait = new WaitHandle[] { stopEvent, addEvent }; BufferPool.Buffer heartbeat_data = new BufferPool.Buffer(null, new byte[0], false); int event_idx; while ((event_idx = WaitHandle.WaitAny(wait, parameters.heartbeat)) != 0) { if (event_idx == WaitHandle.WaitTimeout) { // Handle heartbeat if (sendResult == null || sendResult.Done) { sendResult = CreateResult(); SendAsync(sendResult, heartbeat_data, false); } } else { Threads.Task task = null; lock (addEvent) { if (sendResult == null || sendResult.Done) { sendResult = null; lock (sendQueue) { if (sendQueue.Count > 0) { task = sendQueue.Dequeue(); } else { // Nothing to do anymore, go to sleep addEvent.Reset(); } } } else { // Not done yet, go to sleep addEvent.Reset(); } } if (task != null) { sendResult = (Threads.Result)task.result; task.callback(); } } } }
public void SendAsync(BufferPool.Buffer data, bool dispose_buffer = true) { if (!disposed) { lock (sendQueue) { Threads.Result result = CreateResult(); sendQueue.Enqueue(new Threads.Task(() => SendAsync(result, data, dispose_buffer), result)); } lock (addEvent) { addEvent.Set(); } } }
public void SendAsync(byte[] data) { if (!disposed) { lock (sendQueue) { Threads.Result result = CreateResult(); sendQueue.Enqueue(new Threads.Task(() => SendAsync(result, data), result)); } lock (addEvent) { addEvent.Set(); } } }
public Base(Negotiation.Base parent, Message.Negotiation.Parameters parameters, UnityAction <Base> disconnection_handler) { this.parent = parent; this.parameters = parameters; events = new ChannelEvents(); events.onDisconnectedHandler = new ChannelEvents.DisonnectionHandlerCallback(); events.onDisconnectedHandler.AddListener(disconnection_handler); sendResult = null; sendQueue = new Queue <Threads.Task>(); stopEvent = new ManualResetEvent(false); addEvent = new ManualResetEvent(false); worker = new Threads.Thread(Worker); }
protected override void SendAsync(Threads.Result result, byte[] data) { try { if (client != null) { client.BeginSend(data, data.Length, FinalizeSend, new SendState { result = result, data = data }); } else { throw new ArgumentNullException("client", "The connection UdpClient is not defined."); } } catch (Exception e) { result.Complete(e); } }
protected abstract void SendAsync(Threads.Result result, BufferPool.Buffer data, bool dispose_buffer = true);
public SendState(Threads.Result result, BufferPool.Buffer data, bool dispose_buffer) { this.result = result; this.data = data; this.dispose_buffer = dispose_buffer; }
protected abstract void SendAsync(Threads.Result result, byte[] data);