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); } } }