private ZkprProtocolMessages.Multi DeserializeMulti(int xid) { // A Multi consists of a repeating pattern of MultiHeader // int OpType. (-1 or 0 is no-op) // byte if '1' if done or '0' // int error byte (set t0 -1 on request) // Seralized Op depending on Type bool done = false; List <IZooKeeperRequest> ops = new List <IZooKeeperRequest>(); do { ZkprProtocolMessages.MultiHeader mh = this.DeserializeMultiHeader(); if (mh.Done) { done = true; } else { switch (mh.OpType) { case ZooKeeperRequestType.Create: ZkprProtocolMessages.Create cr = this.DeserializeCreate(xid); ops.Add(cr); break; case ZooKeeperRequestType.Delete: ZkprProtocolMessages.Delete dl = this.DeserializeDelete(xid); ops.Add(dl); break; case ZooKeeperRequestType.SetData: ZkprProtocolMessages.SetData sd = this.DeserializeSetData(xid); ops.Add(sd); break; case ZooKeeperRequestType.Check: ZkprProtocolMessages.Check ch = this.DeserializeCheck(xid); ops.Add(ch); break; } } }while (!done); return(ZkprProtocolMessages.Multi.CreateMulti(xid, ops)); }
private IReadOnlyList <Op> TranslateZkprOpsListToRmOpsList(IReadOnlyList <IZooKeeperRequest> zkprOps) { List <Op> rmOps = new List <Op>(); foreach (IZooKeeperRequest zkReq in zkprOps) { switch (zkReq.RequestType) { case ZooKeeperRequestType.Create: ZkprProtocolMessages.Create zkCreate = zkReq as ZkprProtocolMessages.Create; IReadOnlyList <Acl> acls = this.TranslateZkprAclListToRMAclList(zkCreate.Acls); CreateMode cm = this.TranslateZkprCreatFlagsToRmCreateMode(zkCreate.Flags); rmOps.Add(Op.Create(zkCreate.Path, zkCreate.Data, acls, cm)); break; case ZooKeeperRequestType.Delete: ZkprProtocolMessages.Delete zkDelete = zkReq as ZkprProtocolMessages.Delete; rmOps.Add(Op.Delete(zkDelete.Path, zkDelete.Version, false)); break; case ZooKeeperRequestType.SetData: ZkprProtocolMessages.SetData zkSetData = zkReq as ZkprProtocolMessages.SetData; rmOps.Add(Op.SetData(zkSetData.Path, zkSetData.Data, zkSetData.Version)); break; case ZooKeeperRequestType.Check: ZkprProtocolMessages.Check zkCheck = zkReq as ZkprProtocolMessages.Check; rmOps.Add(Op.Check(zkCheck.Path, zkCheck.Version)); break; } } return(rmOps); }