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); } }
public bool Receive(out Message.Base message) { uint read = 0; uint size = 0; message = null; if (stream != null && parent != null) { if (ReceiveData(stream, headerBuffer, headerSize)) { message = Pattern.Factory <Message.Base, byte> .CreateInstance(headerBuffer[0]); size = new Converter32(headerBuffer[1], headerBuffer[2], headerBuffer[3], headerBuffer[4]); Binary.Buffer buffer = parent.Serializer.GetBuffer(size); if (ReceiveData(stream, buffer.Data, size)) { read = parent.Serializer.FromBytesOverwrite(buffer, 0, message); } } } return(message != null && read == size); }
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); } }
public void Send(Message.Base message) { if (stream != null && parent != null) { Binary.Buffer buffer = parent.Serializer.GetBuffer(256); uint written = parent.Serializer.ToBytes(ref buffer, 0, message); Converter32 converter = new Converter32(written); stream.WriteByte(Pattern.Factory <Message.Base, byte> .Get(message.GetType())); stream.WriteByte(converter.Byte1); stream.WriteByte(converter.Byte2); stream.WriteByte(converter.Byte3); stream.WriteByte(converter.Byte4); stream.Write(buffer.Data, 0, (int)written); } }
protected void FinalizeReceiveLength(IAsyncResult async_result) { FinalizeReceive(async_result, state => { Converter32 c = new Converter32(state.data[0], state.data[1], state.data[2], state.data[3]); if (c.Int > 0) { state.Set(new byte[c.Int]); stream.BeginRead(state.data, state.offset, state.MissingDataLength, FinalizeReceiveData, state); } else // Notning to read anymore { state.Set(readBuffer); // Wait for next message stream.BeginRead(state.data, state.offset, state.MissingDataLength, FinalizeReceiveLength, state); } }); }
protected void FinalizeReceiveLength(IAsyncResult async_result) { FinalizeReceive(async_result, state => { Converter32 c = new Converter32(state.data.Data[0], state.data.Data[1], state.data.Data[2], state.data.Data[3]); if (c.Int > 0) { state.Set(parent.Serializer.GetBuffer((uint)c.Int), (uint)c.Int); BeginReceive(state.data.Data, state.offset, state.MissingDataLength, FinalizeReceiveData, state); } else // Notning to read anymore { state.Set(readBuffer, (uint)readBuffer.Data.Length); // Wait for next message BeginReceive(state.data.Data, state.offset, state.MissingDataLength, FinalizeReceiveLength, state); } }); }