protected Request(RHost host, Message message) { Id = message.Id; MessageName = message.Name; Json = message.Json; host._requests[Id] = this; }
public EvaluationRequest(RHost host, string expression, REvaluationKind kind, out JArray message) { Expression = expression; Kind = kind; var nameBuilder = new StringBuilder("="); if (kind.HasFlag(REvaluationKind.Reentrant)) { nameBuilder.Append('@'); } if (kind.HasFlag(REvaluationKind.Cancelable)) { nameBuilder.Append('/'); } if (kind.HasFlag(REvaluationKind.BaseEnv)) { nameBuilder.Append('B'); } if (kind.HasFlag(REvaluationKind.EmptyEnv)) { nameBuilder.Append('E'); } if (kind.HasFlag(REvaluationKind.NoResult)) { nameBuilder.Append('0'); } MessageName = nameBuilder.ToString(); expression = expression.Replace("\r\n", "\n"); message = host.CreateMessage(out Id, MessageName, expression); }
public override void Handle(RHost host, Message response) { response.ExpectArguments(1, 3); var firstArg = response[0] as JValue; if (firstArg != null && firstArg.Value == null) { CompletionSource.TrySetCanceled(); return; } response.ExpectArguments(3); var parseStatus = response.GetEnum <RParseStatus>(0, "parseStatus", parseStatusNames); var error = response.GetString(1, "error", allowNull: true); REvaluationResult result; if (Kind.HasFlag(REvaluationKind.NoResult)) { result = new REvaluationResult(error, parseStatus); } else if (Kind.HasFlag(REvaluationKind.RawResult)) { result = new REvaluationResult(response.Blob, error, parseStatus); } else { result = new REvaluationResult(response[2], error, parseStatus); } CompletionSource.TrySetResult(result); }
static void Main(string[] args) { Console.CancelKeyPress += Console_CancelKeyPress; var host = new RHost("Program", new Program()); host.CreateAndRun(args[0]).GetAwaiter().GetResult(); _evaluator = host; }
public static async Task <CreateBlobRequest> CreateAsync(RHost host, CancellationToken cancellationToken) { var message = host.CreateRequestMessage("?CreateBlob", new JArray()); var request = new CreateBlobRequest(host, message, cancellationToken); await host.SendAsync(message, cancellationToken); return(request); }
/// <summary> /// Appends data to the end of the blob /// </summary> public static async Task <BlobWriteRequest> WriteAsync(RHost host, ulong blobId, byte[] data, long position, CancellationToken cancellationToken) { var message = host.CreateRequestMessage("?WriteBlob", new JArray { blobId, position }, data); var request = new BlobWriteRequest(host, message, cancellationToken); await host.SendAsync(message, cancellationToken); return(request); }
public static async Task <BlobReadRequest> ReadAsync(RHost host, ulong blobId, long position, long count, CancellationToken cancellationToken) { var message = host.CreateRequestMessage("?ReadBlob", new JArray { blobId, position, count }); var request = new BlobReadRequest(host, message, cancellationToken); await host.SendAsync(message, cancellationToken); return(request); }
public static async Task <GetBlobRequest> SendAsync(RHost host, ulong blobId, CancellationToken cancellationToken) { var message = host.CreateMessage("?GetBlob", ulong.MaxValue, new JArray { blobId }); var request = new GetBlobRequest(host, message, cancellationToken); await host.SendAsync(message, cancellationToken); return(request); }
public static async Task <BlobSizeRequest> SetSizeAsync(RHost host, ulong blobId, long size, CancellationToken cancellationToken) { var message = host.CreateRequestMessage("?SetBlobSize", new JArray { blobId, size }); var request = new BlobSizeRequest(host, message, cancellationToken); await host.SendAsync(message, cancellationToken); return(request); }
public static async Task <EvaluationRequest> SendAsync(RHost host, string expression, REvaluationKind kind, CancellationToken cancellationToken) { var nameBuilder = new StringBuilder("?="); if (kind.HasFlag(REvaluationKind.Reentrant)) { nameBuilder.Append('@'); } if (kind.HasFlag(REvaluationKind.Cancelable)) { nameBuilder.Append('/'); } if (kind.HasFlag(REvaluationKind.BaseEnv)) { nameBuilder.Append('B'); } if (kind.HasFlag(REvaluationKind.EmptyEnv)) { nameBuilder.Append('E'); } if (kind.HasFlag(REvaluationKind.NoResult)) { nameBuilder.Append('0'); } if (kind.HasFlag(REvaluationKind.RawResult)) { nameBuilder.Append('r'); } string messageName = nameBuilder.ToString(); expression = expression.Replace("\r\n", "\n"); var message = host.CreateMessage(messageName, ulong.MaxValue, new JArray { expression }); var request = new EvaluationRequest(host, message, kind, cancellationToken); await host.SendAsync(message, cancellationToken); return(request); }
private EvaluationRequest(RHost host, Message message, REvaluationKind kind, CancellationToken cancellationToken) : base(host, message, cancellationToken) { Kind = kind; }
public override void Handle(RHost host, Message response) { long size = response.GetInt64(0, "blob_size"); CompletionSource.TrySetResult(size); }
private BlobSizeRequest(RHost host, Message message, CancellationToken cancellationToken) : base(host, message, cancellationToken) { }
public override void Handle(RHost host, Message response) { ulong id = response.GetUInt64(0, "blob_id"); CompletionSource.TrySetResult(id); }
public abstract void Handle(RHost host, Message response);
public static Task <BlobReadRequest> ReadAllAsync(RHost host, ulong blobId, CancellationToken cancellationToken) { return(ReadAsync(host, blobId, 0, -1, cancellationToken)); }
public override void Handle(RHost host, Message response) { CompletionSource.TrySetResult(response.Blob); }