// Send method for operations with callbacks. Store the callback in a queue for retrieval upon completion of server operation. private void SendPayload <T>(InterlockedPropertyInfo propInfo, AtomicOperators operation, Action <T> callback, params T[] parameters) { AtomicPayload payload = new AtomicPayload ( this.Client.ClientId, propInfo.ObjectId, propInfo.Property.Index, propInfo.PropertyType.AssemblyQualifiedName, operation, parameters.Select(p => Json.WriteObject(p)).ToArray() ); // For operations with callbacks, we need to create an async result and queue it up for retrieval when the server operation completes if (callback != null) { var getResult = new SharedAsyncResult <T>(EndSendAtomicPayload <T>, payload.PayloadId, callback); this.Client.EnqueueAsyncResult(getResult, payload.PayloadId); } this.Client.SendPublishEvent(payload); }
public AtomicPayload(Guid clientId, Guid objectId, short propertyIndex, string type, AtomicOperators atomicOperator, string[] parameters, ushort payloadId) : this(clientId, objectId, propertyIndex, type, atomicOperator, parameters) { this.PayloadId = payloadId; }
public AtomicPayload(Guid clientId, Guid objectId, short propertyIndex, string type, AtomicOperators atomicOperator, string[] parameters) : base(clientId) { Debug.Assert(parameters.Length <= 2); this.AtomicOperator = atomicOperator; this.ObjectId = objectId; this.PropertyIndex = propertyIndex; this.PropertyType = type; this.Parameters = parameters; }