public void serialize(OutputArchive archive, string tag) { archive.startRecord(this, tag); foreach (Op op in ops) { MultiHeader h = new MultiHeader(op.get_Type(), false, -1); ((Record)h).serialize(archive, tag); ZooDefs.OpCode opCode = EnumUtil <ZooDefs.OpCode> .DefinedCast(op.get_Type()); switch (opCode) { case ZooDefs.OpCode.create: op.toRequestRecord().serialize(archive, tag); break; case ZooDefs.OpCode.delete: op.toRequestRecord().serialize(archive, tag); break; case ZooDefs.OpCode.setData: op.toRequestRecord().serialize(archive, tag); break; case ZooDefs.OpCode.check: op.toRequestRecord().serialize(archive, tag); break; default: throw new IOException("Invalid type of op"); } } ((Record) new MultiHeader(-1, true, -1)).serialize(archive, tag); archive.endRecord(this, tag); }
public void serialize(OutputArchive archive, string tag) { foreach (OpResult result in results) { ZooDefs.OpCode opcode = EnumUtil <ZooDefs.OpCode> .DefinedCast(result.get_Type()); int err = result.get_Type() == (int)ZooDefs.OpCode.error ? ((OpResult.ErrorResult)result).getErr() : 0; ((Record) new MultiHeader(result.get_Type(), false, err)).serialize(archive, tag); switch (opcode) { case ZooDefs.OpCode.create: ((Record) new CreateResponse(((OpResult.CreateResult)result).getPath())).serialize(archive, tag); break; case ZooDefs.OpCode.delete: case ZooDefs.OpCode.check: break; case ZooDefs.OpCode.setData: ((Record) new SetDataResponse(((OpResult.SetDataResult)result).getStat())).serialize(archive, tag); break; case ZooDefs.OpCode.error: ((Record) new ErrorResponse(((OpResult.ErrorResult)result).getErr())).serialize(archive, tag); break; default: throw new IOException("Invalid type " + result.get_Type() + " in MultiResponse"); } } ((Record) new MultiHeader(-1, true, -1)).serialize(archive, tag); }
public void deserialize(InputArchive archive, string tag) { results = new List <OpResult>(); archive.startRecord(tag); MultiHeader h = new MultiHeader(); ((Record)h).deserialize(archive, tag); while (!h.getDone()) { ZooDefs.OpCode opcode = EnumUtil <ZooDefs.OpCode> .DefinedCast(h.get_Type()); switch (opcode) { case ZooDefs.OpCode.create: CreateResponse cr = new CreateResponse(); ((Record)cr).deserialize(archive, tag); results.Add(new OpResult.CreateResult(cr.getPath())); break; case ZooDefs.OpCode.delete: results.Add(new OpResult.DeleteResult()); break; case ZooDefs.OpCode.setData: SetDataResponse sdr = new SetDataResponse(); ((Record)sdr).deserialize(archive, tag); results.Add(new OpResult.SetDataResult(sdr.getStat())); break; case ZooDefs.OpCode.check: results.Add(new OpResult.CheckResult()); break; case ZooDefs.OpCode.error: //FIXME: need way to more cleanly serialize/deserialize exceptions ErrorResponse er = new ErrorResponse(); ((Record)er).deserialize(archive, tag); results.Add(new OpResult.ErrorResult(er.getErr())); break; default: throw new IOException("Invalid type " + h.get_Type() + " in MultiResponse"); } ((Record)h).deserialize(archive, tag); } archive.endRecord(tag); }
public void deserialize(InputArchive archive, string tag) { archive.startRecord(tag); MultiHeader h = new MultiHeader(); ((Record)h).deserialize(archive, tag); while (!h.getDone()) { ZooDefs.OpCode opCode = EnumUtil <ZooDefs.OpCode> .DefinedCast(h.get_Type()); switch (opCode) { case ZooDefs.OpCode.create: CreateRequest cr = new CreateRequest(); ((Record)cr).deserialize(archive, tag); add(Op.create(cr.getPath(), cr.getData(), cr.getAcl(), cr.getFlags())); break; case ZooDefs.OpCode.delete: DeleteRequest dr = new DeleteRequest(); ((Record)dr).deserialize(archive, tag); add(Op.delete(dr.getPath(), dr.getVersion())); break; case ZooDefs.OpCode.setData: SetDataRequest sdr = new SetDataRequest(); ((Record)sdr).deserialize(archive, tag); add(Op.setData(sdr.getPath(), sdr.getData(), sdr.getVersion())); break; case ZooDefs.OpCode.check: CheckVersionRequest cvr = new CheckVersionRequest(); ((Record)cvr).deserialize(archive, tag); add(Op.check(cvr.getPath(), cvr.getVersion())); break; default: throw new IOException("Invalid type of op"); } ((Record)h).deserialize(archive, tag); } archive.endRecord(tag); }
// prevent untyped construction private Op(ZooDefs.OpCode type, string path) { this.type = (int)type; this.path = path; }
private OpResult(ZooDefs.OpCode type) { this.type = (int)type; }