public T Read <T>() where T : new() { Type expectedType = typeof(T); MessageCode expectedCode = MessageCodeTypeMapBuilder.GetMessageCodeFor(expectedType); int size = ReadMessageSize(expectedCode); return(DeserializeInstance <T>(size)); }
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()); }
public void Write <T>(T message) where T : class { MessageCode messageCode = MessageCodeTypeMapBuilder.GetMessageCodeFor(typeof(T)); DoWrite(s => Serializer.Serialize(s, message), messageCode); }