Ejemplo n.º 1
0
            public void createBB()
            {
                MemoryStream          ms     = new MemoryStream();
                BigEndianBinaryWriter writer = new BigEndianBinaryWriter(ms);
                BinaryOutputArchive   boa    = BinaryOutputArchive.getArchive(writer);

                boa.writeInt(-1, "len");     // We'll fill this in later
                if (requestHeader != null)
                {
                    ((Record)requestHeader).serialize(boa, "header");
                }
                if (request is ConnectRequest)
                {
                    request.serialize(boa, "connect");
                    // append "am-I-allowed-to-be-readonly" flag
                    boa.writeBool(readOnly, "readOnly");
                }
                else if (request != null)
                {
                    request.serialize(boa, "request");
                }
                ms.Position = 0;
                bb          = new ByteBuffer(ms);
                boa.writeInt(bb.limit() - 4, "len");
                ms.Position = 0;
            }
Ejemplo n.º 2
0
 internal Packet(RequestHeader header, ReplyHeader replyHeader, IRecord request, IRecord response, byte[] data, ZooKeeper.WatchRegistration watchRegistration, string serverPath, string clientPath)
 {
     this.header      = header;
     this.replyHeader = replyHeader;
     this.request     = request;
     this.response    = response;
     this.serverPath  = serverPath;
     this.clientPath  = clientPath;
     if (data != null)
     {
         this.data = data;
     }
     else
     {
         try
         {
             MemoryStream ms = new MemoryStream();
             using (EndianBinaryWriter writer = new EndianBinaryWriter(EndianBitConverter.Big, ms, Encoding.UTF8))
             {
                 BinaryOutputArchive boa = BinaryOutputArchive.getArchive(writer);
                 boa.WriteInt(-1, "len"); // We'll fill this in later
                 if (header != null)
                 {
                     header.Serialize(boa, "header");
                 }
                 if (request != null)
                 {
                     request.Serialize(boa, "request");
                 }
                 ms.Position = 0;
                 int len = Convert.ToInt32(ms.Length); // now we have the real length
                 writer.Write(len - 4);                // update the length info
                 this.data = ms.ToArray();
             }
         }
         #if !NET_CORE
         catch (IOException e)
         {
             LOG.Warn("Ignoring unexpected exception", e);
         }
         #endif
         #if NET_CORE
         catch (Exception e)
         {
         }
         #endif
     }
     this.watchRegistration = watchRegistration;
 }
Ejemplo n.º 3
0
        private static MultiResponse codeDecode(MultiResponse request)
        {
            var ms = new MemoryStream();
            BigEndianBinaryWriter baos = new BigEndianBinaryWriter(ms);
            BinaryOutputArchive   boa  = BinaryOutputArchive.getArchive(baos);

            request.serialize(boa, "result");
            ms.Position = 0;

            BinaryInputArchive bia            = BinaryInputArchive.getArchive(new BigEndianBinaryReader(ms));
            MultiResponse      decodedRequest = new MultiResponse();

            decodedRequest.deserialize(bia, "result");
            return(decodedRequest);
        }
Ejemplo n.º 4
0
        private MultiTransactionRecord codeDecode(MultiTransactionRecord request)
        {
            var ms = new MemoryStream();
            BigEndianBinaryWriter baos = new BigEndianBinaryWriter(ms);
            BinaryOutputArchive   boa  = BinaryOutputArchive.getArchive(baos);

            request.serialize(boa, "request");
            ms.Position = 0;

            BinaryInputArchive     bia            = BinaryInputArchive.getArchive(new BigEndianBinaryReader(ms));
            MultiTransactionRecord decodedRequest = new MultiTransactionRecord();

            decodedRequest.deserialize(bia, "request");
            return(decodedRequest);
        }
Ejemplo n.º 5
0
        private void PrimeConnection(TcpClient client)
        {
            LOG.Info(string.Format("Socket connection established to {0}, initiating session", client.Client.RemoteEndPoint));

            ConnectRequest conReq = new ConnectRequest(0, lastZxid, Convert.ToInt32(conn.SessionTimeout.TotalMilliseconds), conn.SessionId, conn.SessionPassword);

            byte[] buffer;
            using (MemoryStream ms = new MemoryStream())
                using (EndianBinaryWriter writer = new EndianBinaryWriter(EndianBitConverter.Big, ms, Encoding.UTF8))
                {
                    BinaryOutputArchive boa = BinaryOutputArchive.getArchive(writer);
                    boa.WriteInt(-1, "len");
                    conReq.Serialize(boa, "connect");
                    ms.Position = 0;
                    writer.Write(ms.ToArray().Length - 4);
                    buffer = ms.ToArray();
                }
            lock (outgoingQueueLock)
            {
                if (!ClientConnection.disableAutoWatchReset && (!zooKeeper.DataWatches.IsEmpty() || !zooKeeper.ExistWatches.IsEmpty() || !zooKeeper.ChildWatches.IsEmpty()))
                {
                    var sw = new SetWatches(lastZxid, zooKeeper.DataWatches, zooKeeper.ExistWatches, zooKeeper.ChildWatches);
                    var h  = new RequestHeader();
                    h.Type = (int)OpCode.SetWatches;
                    h.Xid  = -8;
                    Packet packet = new Packet(h, new ReplyHeader(), sw, null, null, null, null, null);
                    outgoingQueue.AddFirst(packet);
                }

                foreach (ClientConnection.AuthData id in conn.authInfo)
                {
                    outgoingQueue.AddFirst(new Packet(new RequestHeader(-4, (int)OpCode.Auth), null, new AuthPacket(0, id.scheme, id.data), null, null, null, null, null));
                }
                outgoingQueue.AddFirst((new Packet(null, null, null, null, buffer, null, null, null)));
            }

            lock (this)
            {
                EnableWrite();
            }

            if (LOG.IsDebugEnabled)
            {
                LOG.Debug("Session establishment request sent on " + client.Client.RemoteEndPoint);
            }
        }