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); } }
private void PrimeConnection() { LOG.InfoFormat("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); lock (outgoingQueue) { 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); addPacketFirst(packet); } foreach (ClientConnection.AuthData id in conn.authInfo) addPacketFirst( new Packet(new RequestHeader(-4, (int) OpCode.Auth), null, new AuthPacket(0, id.Scheme, id.GetData()), null, null, null, null, null)); addPacketFirst(new Packet(null, null, conReq, null, null, null, null, null)); } packetAre.Set(); if (LOG.IsDebugEnabled) LOG.DebugFormat("Session establishment request sent on {0}",client.Client.RemoteEndPoint); }