Beispiel #1
0
 public DynamicElementLengthDelimitedArrayReflector(Type classThatHasThisField, String fieldName,
                                                    IsLastElement isLastElementCallback, IInstanceSerializer <ElementType> elementSerializer)
     : base(classThatHasThisField, fieldName, typeof(ElementType[]))
 {
     this.isLastElementCallback = isLastElementCallback;
     this.elementSerializer     = elementSerializer;
 }
Beispiel #2
0
 public DynamicSizeElementArrayReflector(Type classThatHasThisField, String fieldName, Byte arraySizeByteCount,
                                         IInstanceSerializer <ElementType> elementSerializer)
     : base(classThatHasThisField, fieldName, typeof(ElementType[]))
 {
     this.arraySizeByteCount = arraySizeByteCount;
     this.elementSerializer  = elementSerializer;
 }
Beispiel #3
0
        public static UInt32 SerializeCommand <T>(IInstanceSerializer <T> serializer, Byte commandID, T command, Buf buffer, UInt32 offset)
        {
            UInt32 commandLength = 1 + serializer.SerializationLength(command);

            offset = FrameProtocol.SetupFrame(buffer, offset, commandLength);
            buffer.array[offset++] = commandID;
            return(serializer.Serialize(buffer.array, offset, command));
        }
Beispiel #4
0
        public static String DataSmallString <T>(this IInstanceSerializer <T> instanceSerializer, T instance, StringBuilder builder)
        {
            builder.Length = 0;
            instanceSerializer.DataSmallString(instance, builder);
            String dataString = builder.ToString();

            builder.Length = 0;
            return(dataString);
        }
Beispiel #5
0
        public T CallBlockingTcp <T>(UInt32 procedureNumber, ISerializer requestSerializer, IInstanceSerializer <T> responseSerializer, ByteArrayReference buffer)
        {
            UInt32 transmissionID = nextTransactionID++;

            RpcMessage callMessage = new RpcMessage(transmissionID, new RpcCall(programHeader,
                                                                                procedureNumber, credentials, verifier));

            callMessage.SendTcp(socket, buffer, requestSerializer);

            UInt32     contentOffset, contentOffsetLimit;
            RpcMessage replyMessage = new RpcMessage(socket, buffer, out contentOffset, out contentOffsetLimit);

            if (replyMessage.messageType != RpcMessageType.Reply)
            {
                throw new InvalidOperationException(String.Format("Received an Rpc call from '{0}' but expected an rpc reply", socket.RemoteEndPoint));
            }

            if (replyMessage.transmissionID != transmissionID)
            {
                throw new InvalidOperationException(String.Format("Expected reply with transmission id {0} but got {1}", transmissionID, replyMessage.transmissionID));
            }

            RpcReply reply = replyMessage.reply;

            RpcCallFailedException.VerifySuccessfulReply(callMessage.call, reply);

            T      instance;
            UInt32 offset = responseSerializer.Deserialize(buffer.array, contentOffset, contentOffsetLimit, out instance);

            if (offset != contentOffsetLimit)
            {
                StringBuilder dataBuidler = new StringBuilder();
                throw new InvalidOperationException(String.Format("Deserialization of rpc message '{0}' as the following '{1}' resulted in an offset of {2}, but the record had {3} bytes",
                                                                  DataStringBuilder.DataString(reply, dataBuidler), DataStringBuilder.DataString(responseSerializer, instance, dataBuidler), offset, contentOffsetLimit));
            }

            return(instance);
        }
Beispiel #6
0
 public InstanceSerializerAdapter(IInstanceSerializer <T> serializer, T instance)
 {
     this.serializer = serializer;
     this.instance   = instance;
 }