public void Dispose() { this.storeReader.Dispose(); this.storeReader = null; this.client.Dispose(); this.client = null; this.stream.Dispose(); this.stream = null; }
public void Connect() { try { var buffer = new byte[128]; var length = sizeof(short) + sizeof(long) + sizeof(long); // version, start ticks, end ticks for (var i = 0; i < length;) { i += this.stream.Read(buffer, i, length - i); } var reader = new BufferReader(buffer); // check client version var version = reader.ReadInt16(); if (version != ProtocolVersion) { throw new IOException($"Unsupported remoting protocol version: {version}"); } // get replay interval var startTicks = reader.ReadInt64(); if (startTicks == -1) { // special indication of `DateTime.UtcNow` at the exporter end startTicks = DateTime.UtcNow.Ticks; } var start = new DateTime(startTicks); var end = new DateTime(reader.ReadInt64()); this.interval = new TimeInterval(start, end); // send ID, stream count, transport and protocol params var writer = new BufferWriter(buffer); writer.Write(0); // length placeholder writer.Write(this.id.ToByteArray()); writer.Write(this.dataTransport.Transport.ToString()); this.dataTransport.WriteTransportParams(writer); var len = writer.Position; writer.Reset(); writer.Write(len - 4); this.stream.Write(writer.Buffer, 0, len); this.storeReader = new PsiStoreReader(this.storeName, this.storePath, this.MetaUpdateHandler, true); } catch (Exception) { this.Disconnect(); throw; } }