Esempio n. 1
0
        private async Task <bool> SubmitAsync(OpMessageType msgType, IEnumerable <T> ops)
        {
            // compose all of the ops into one op
            JToken composedOp = null;

            foreach (T op in ops)
            {
                JToken serializedOp = Type.Serialize(op);
                composedOp = composedOp != null?Type.Compose(composedOp, serializedOp) : serializedOp;
            }

            // make sure that the last submit has completed
            if (_inflightOp != null)
            {
                await _inflightOp.Task;
            }

            // send op to server
            _inflightOp = new TaskCompletionSource <bool>();
            int seq = _conn.NextSeq();

            _inflightOpInfo = new OpInfo(msgType, seq, composedOp);
            await _conn.SendOpAsync(this, msgType, seq, composedOp);

            return(await _inflightOp.Task);
        }
Esempio n. 2
0
        internal Task SendOpAsync(IDocumentInternal doc, OpMessageType msgType, int seq, JToken op)
        {
            var msg = new JObject(
                new JProperty("a", "op"),
                new JProperty("c", doc.Collection),
                new JProperty("d", doc.Id),
                new JProperty("v", doc.Version < 0 ? null : (int?)doc.Version),
                new JProperty("src", _id),
                new JProperty("seq", seq));

            switch (msgType)
            {
            case OpMessageType.Op:
                msg["op"] = op.DeepClone();
                break;

            case OpMessageType.Create:
                msg["create"] = new JObject(
                    new JProperty("type", doc.Type.Uri.ToString()),
                    new JProperty("data", op.DeepClone()));
                break;

            case OpMessageType.Delete:
                msg["del"] = true;
                break;
            }
            return(_socket.SendTextAsync(msg.ToString()));
        }
Esempio n. 3
0
 public OpInfo(OpMessageType msgType, int seq, JToken op)
 {
     MessageType = msgType;
     Seq         = seq;
     Op          = op;
 }
Esempio n. 4
0
 private Task <bool> SubmitAsync(OpMessageType msgType, T op)
 {
     return(SubmitAsync(msgType, new[] { op }));
 }