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; }
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; }
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); }
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); }
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); } }