示例#1
0
 public void Dispose()
 {
     this.storeReader.Dispose();
     this.storeReader = null;
     this.client.Dispose();
     this.client = null;
     this.stream.Dispose();
     this.stream = null;
 }
示例#2
0
            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;
                }
            }