Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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);
                }
            });
        }
Ejemplo n.º 6
0
        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);
                }
            });
        }