Ejemplo n.º 1
0
        public T Read <T>() where T : new()
        {
            Type        expectedType = typeof(T);
            MessageCode expectedCode = MessageCodeTypeMapBuilder.GetMessageCodeFor(expectedType);
            int         size         = ReadMessageSize(expectedCode);

            return(DeserializeInstance <T>(size));
        }
Ejemplo n.º 2
0
        private RiakResult DoWrite(Action <MemoryStream> serializer, Type messageType)
        {
            byte[] messageBody;
            int    messageLength = 0;

            using (var memStream = new MemoryStream())
            {
                // add a buffer to the start of the array to put the size and message code
                memStream.Position += PbMsgHeaderSize;
                serializer(memStream);
                messageBody   = memStream.GetBuffer();
                messageLength = (int)memStream.Position;
            }

            // check to make sure something was written, otherwise we'll have to create a new array
            if (messageLength == PbMsgHeaderSize)
            {
                messageBody = new byte[PbMsgHeaderSize];
            }

            MessageCode messageCode = MessageCodeTypeMapBuilder.GetMessageCodeFor(messageType);
            var         size        = BitConverter.GetBytes(IPAddress.HostToNetworkOrder((int)messageLength - PbMsgHeaderSize + 1));

            Array.Copy(size, messageBody, SizeOfInt);
            messageBody[SizeOfInt] = (byte)messageCode;

            if (NetworkStream.CanWrite)
            {
                NetworkStream.Write(messageBody, 0, messageLength);
            }
            else
            {
                string errorMessage = string.Format("Failed to send data to server - Can't write: {0}:{1}", server, port);
                throw new RiakException(errorMessage, true);
            }

            return(RiakResult.Success());
        }
Ejemplo n.º 3
0
        public void Write <T>(T message) where T : class
        {
            MessageCode messageCode = MessageCodeTypeMapBuilder.GetMessageCodeFor(typeof(T));

            DoWrite(s => Serializer.Serialize(s, message), messageCode);
        }