public void ReadFields(ZooKeeperNet.IO.EndianBinaryReader reader)
 {
     BinaryInputArchive archive = new BinaryInputArchive(reader);
     Deserialize(archive, string.Empty);
 }
示例#2
0
        public void ReadFields(IkZooKeeperNet.IO.EndianBinaryReader reader)
        {
            BinaryInputArchive archive = new BinaryInputArchive(reader);

            Deserialize(archive, string.Empty);
        }
示例#3
0
        public void ReadFields(EndianBinaryReader reader)
        {
            BinaryInputArchive archive = new BinaryInputArchive(reader);

            this.Deserialize(archive, string.Empty);
        }
示例#4
0
        public void ReadFields(Newegg.EC.Zookeeper.Client.Core.IO.EndianBinaryReader reader)
        {
            BinaryInputArchive archive = new BinaryInputArchive(reader);

            Deserialize(archive, string.Empty);
        }
示例#5
0
        internal void readResponse(ByteBuffer incomingBuffer)
        {
            BigEndianBinaryReader bbis = new BigEndianBinaryReader(incomingBuffer.Stream);
            BinaryInputArchive    bbia = BinaryInputArchive.getArchive(bbis);

            ReplyHeader replyHdr = new ReplyHeader();

            ((Record)replyHdr).deserialize(bbia, "header");
            if (replyHdr.getXid() == -2)
            {
                // -2 is the xid for pings
                if (LOG.isDebugEnabled())
                {
                    LOG.debug("Got ping response for sessionid: 0x" + sessionId.ToHexString() + " after " +
                              ((TimeHelper.ElapsedNanoseconds - lastPingSentNs) / 1000000) + "ms");
                }
                return;
            }
            if (replyHdr.getXid() == -4)
            {
                // -4 is the xid for AuthPacket
                if (replyHdr.getErr() == (int)KeeperException.Code.AUTHFAILED)
                {
                    state.Value = ZooKeeper.States.AUTH_FAILED;
                    queueEvent(new WatchedEvent(Watcher.Event.EventType.None,
                                                Watcher.Event.KeeperState.AuthFailed, null));
                }
                if (LOG.isDebugEnabled())
                {
                    LOG.debug("Got auth sessionid:0x"
                              + sessionId.ToHexString());
                }
                return;
            }
            if (replyHdr.getXid() == -1)
            {
                // -1 means notification
                if (LOG.isDebugEnabled())
                {
                    LOG.debug("Got notification sessionid:0x"
                              + sessionId.ToHexString());
                }
                WatcherEvent @event = new WatcherEvent();
                ((Record)@event).deserialize(bbia, "response");
                // convert from a server path to a client path
                if (chrootPath != null)
                {
                    string serverPath = @event.getPath();
                    if (serverPath == chrootPath)
                    {
                        @event.setPath("/");
                    }
                    else if (serverPath.Length > chrootPath.Length)
                    {
                        @event.setPath(serverPath.Substring(chrootPath.Length));
                    }
                    else
                    {
                        LOG.warn("Got server path " + @event.getPath()
                                 + " which is too short for chroot path "
                                 + chrootPath);
                    }
                }
                WatchedEvent we = new WatchedEvent(@event);
                if (LOG.isDebugEnabled())
                {
                    LOG.debug("Got " + we + " for sessionid 0x" + sessionId.ToHexString());
                }
                queueEvent(we);
                return;
            }

            Packet packet;

            lock (pendingQueue) {
                if (pendingQueue.size() == 0)
                {
                    throw new IOException("Nothing in the queue, but got "
                                          + replyHdr.getXid());
                }
                packet = pendingQueue.First.Value;
                pendingQueue.RemoveFirst();
            }

            /*
             * Since requests are processed in order, we better get a response
             * to the first request!
             */
            try {
                if (packet.requestHeader.getXid() != replyHdr.getXid())
                {
                    packet.replyHeader.setErr((int)KeeperException.Code.CONNECTIONLOSS);
                    throw new IOException("Xid out of order. Got Xid "
                                          + replyHdr.getXid() + " with err "
                                          + +replyHdr.getErr() + " expected Xid "
                                          + packet.requestHeader.getXid()
                                          + " for a packet with details: " + packet);
                }
                packet.replyHeader.setXid(replyHdr.getXid());
                packet.replyHeader.setErr(replyHdr.getErr());
                packet.replyHeader.setZxid(replyHdr.getZxid());
                if (replyHdr.getZxid() > 0)
                {
                    lastZxid.Value = replyHdr.getZxid();
                }
                if (packet.response != null && replyHdr.getErr() == 0)
                {
                    packet.response.deserialize(bbia, "response");
                }
                if (LOG.isDebugEnabled())
                {
                    LOG.debug("Reading reply sessionid:0x" + sessionId.ToHexString() + ", packet:: " +
                              packet);
                }
            }
            finally {
                finishPacket(packet);
            }
        }
        private void ReadResponse(byte[] content)
        {
            using (var reader = new EndianBinaryReader(EndianBitConverter.Big, new MemoryStream(content), Encoding.UTF8))
            {
                BinaryInputArchive bbia     = BinaryInputArchive.GetArchive(reader);
                ReplyHeader        replyHdr = new ReplyHeader();

                replyHdr.Deserialize(bbia, "header");
                if (replyHdr.Xid == -2)
                {
                    // -2 is the xid for pings
                    if (LOG.IsDebugEnabled)
                    {
                        LOG.DebugFormat("Got ping response for sessionid: 0x{0:X} after {1}ms", conn.SessionId, (DateTime.Now.Nanos() - lastPingSentNs) / 1000000);
                    }
                    return;
                }
                if (replyHdr.Xid == -4)
                {
                    // -2 is the xid for AuthPacket
                    // TODO: process AuthPacket here
                    if (LOG.IsDebugEnabled)
                    {
                        LOG.DebugFormat("Got auth sessionid:0x{0:X}", conn.SessionId);
                    }
                    return;
                }
                if (replyHdr.Xid == -1)
                {
                    // -1 means notification
                    if (LOG.IsDebugEnabled)
                    {
                        LOG.DebugFormat("Got notification sessionid:0x{0}", conn.SessionId);
                    }

                    WatcherEvent @event = new WatcherEvent();
                    @event.Deserialize(bbia, "response");

                    // convert from a server path to a client path
                    if (conn.ChrootPath != null)
                    {
                        string serverPath = @event.Path;
                        if (serverPath.CompareTo(conn.ChrootPath) == 0)
                        {
                            @event.Path = PathUtils.PathSeparator;
                        }
                        else
                        {
                            @event.Path = serverPath.Substring(conn.ChrootPath.Length);
                        }
                    }

                    WatchedEvent we = new WatchedEvent(@event);
                    if (LOG.IsDebugEnabled)
                    {
                        LOG.DebugFormat("Got {0} for sessionid 0x{1:X}", we, conn.SessionId);
                    }

                    conn.consumer.QueueEvent(we);
                    return;
                }
                Packet packet;

                /*
                 * Since requests are processed in order, we better get a response
                 * to the first request!
                 */
                if (pendingQueue.TryDequeue(out packet))
                {
                    try
                    {
                        if (packet.header.Xid != replyHdr.Xid)
                        {
                            packet.replyHeader.Err = (int)KeeperException.Code.CONNECTIONLOSS;
                            throw new IOException(new StringBuilder("Xid out of order. Got ").Append(replyHdr.Xid).Append(" expected ").Append(packet.header.Xid).ToString());
                        }

                        packet.replyHeader.Xid  = replyHdr.Xid;
                        packet.replyHeader.Err  = replyHdr.Err;
                        packet.replyHeader.Zxid = replyHdr.Zxid;
                        if (replyHdr.Zxid > 0)
                        {
                            lastZxid = replyHdr.Zxid;
                        }

                        if (packet.response != null && replyHdr.Err == 0)
                        {
                            packet.response.Deserialize(bbia, "response");
                        }

                        if (LOG.IsDebugEnabled)
                        {
                            LOG.DebugFormat("Reading reply sessionid:0x{0:X}, packet:: {1}", conn.SessionId, packet);
                        }
                    }
                    finally
                    {
                        FinishPacket(packet);
                    }
                }
                else
                {
                    throw new IOException(new StringBuilder("Nothing in the queue, but got ").Append(replyHdr.Xid).ToString());
                }
            }
        }