Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
 // prevent untyped construction
 private Op(ZooDefs.OpCode type, string path)
 {
     this.type = (int)type;
     this.path = path;
 }
Пример #6
0
 private OpResult(ZooDefs.OpCode type)
 {
     this.type = (int)type;
 }