예제 #1
0
        private RetryWrapper <GitObjectTaskResult> .InvocationResult StreamObjects(
            IEnumerable <string> objectIds,
            Func <int, GitEndPointResponseData, RetryWrapper <GitObjectTaskResult> .CallbackResult> onSuccess,
            Action <RetryWrapper <GitObjectTaskResult> .ErrorEventArgs> onFailure)
        {
            for (int i = 0; i < this.RetryConfig.MaxAttempts; ++i)
            {
                try
                {
                    using (ReusableMemoryStream mem = new ReusableMemoryStream(string.Empty))
                        using (BinaryWriter writer = new BinaryWriter(mem))
                        {
                            writer.Write(new byte[] { (byte)'G', (byte)'V', (byte)'F', (byte)'S', (byte)' ', 1 });

                            foreach (string objectId in objectIds)
                            {
                                string contents = this.objectResolver(objectId);
                                if (!string.IsNullOrEmpty(contents))
                                {
                                    writer.Write(this.SHA1BytesFromString(objectId));
                                    byte[] bytes = Encoding.UTF8.GetBytes(contents);
                                    writer.Write((long)bytes.Length);
                                    writer.Write(bytes);
                                }
                                else
                                {
                                    writer.Write(new byte[20]);
                                    writer.Write(0L);
                                }
                            }

                            writer.Write(new byte[20]);
                            writer.Flush();
                            mem.Seek(0, SeekOrigin.Begin);

                            using (GitEndPointResponseData response = new GitEndPointResponseData(
                                       HttpStatusCode.OK,
                                       GSDConstants.MediaTypes.CustomLooseObjectsMediaType,
                                       mem,
                                       message: null,
                                       onResponseDisposed: null))
                            {
                                RetryWrapper <GitObjectTaskResult> .CallbackResult result = onSuccess(1, response);
                                return(new RetryWrapper <GitObjectTaskResult> .InvocationResult(1, true, result.Result));
                            }
                        }
                }
                catch
                {
                    continue;
                }
            }

            return(new RetryWrapper <GitObjectTaskResult> .InvocationResult(this.RetryConfig.MaxAttempts, null));
        }
 /// <summary>
 /// Serializes an <see cref="T:Photon.SocketServer.OperationResponse"/>.
 /// </summary>
 /// <param name="operationResponse">The operation response to serialize.</param>
 /// <param name="messageType">
 /// The message type.
 ///Should be eiter <see cref="F:Photon.SocketServer.Rpc.Protocols.RtsMessageType.OperationResponse"/> or <see cref="F:Photon.SocketServer.Rpc.Protocols.RtsMessageType.InternalOperationResponse"/>.
 /// </param>
 /// <returns>The serialized operation response.</returns>
 private byte[] SerializeOperationResponse(OperationResponse operationResponse, RtsMessageType messageType)
 {
     using (ReusableMemoryStream stream = new ReusableMemoryStream())
     {
         stream.Seek((long)this.headerSize, SeekOrigin.Begin);
         SerializeOperationResponse(stream, operationResponse);
         stream.Position = 0L;
         this.headerWriter.WriteHeader(stream, messageType, false);
         return(stream.ToArray());
     }
 }
        /// <summary>
        /// serializes the event data to a stream.
        /// </summary>
        /// <param name="stream">The stream.</param>
        /// <param name="eventData">The event data.</param>
        private void SerializeEventData(ReusableMemoryStream stream, IEventData eventData)
        {
            if ((eventData.Parameters != null) && eventData.Parameters.Remove(0xf4))
            {
                log.WarnFormat("SendEvent - removed reserved parameter {1} from event {0}", new object[] { eventData.Code, (byte)0xf4 });
            }
            BigEndianBinaryWriter writer = new BigEndianBinaryWriter(stream);

            stream.Seek((long)this.headerSize, SeekOrigin.Begin);
            bool flag = eventData.Parameters != null;
            int  num  = flag ? (eventData.Parameters.Count + 1) : 1;

            writer.WriteInt16((short)num);
            writer.WriteByte(0xf4);
            GpBinaryByteWriter.Write(writer, eventData.Code);
            if (flag)
            {
                foreach (KeyValuePair <byte, object> pair in eventData.Parameters)
                {
                    writer.WriteByte(pair.Key);
                    GpBinaryByteWriter.Write(writer, pair.Value);
                }
            }
        }