public virtual Connection NewConnection(NetworkServer networkServer, Socket socket)
		{
			var args = new object[] { networkServer, socket }.Combine(extraArgs);

			try
			{
				return (Connection)Activator.CreateInstance(connectionType, args);
			}
			catch (MissingMethodException)
			{
			}

			return (Connection)Activator.CreateInstance(connectionType, new object[0]);
		}
		public FileSystemCommandConnection(NetworkServer networkServer, Socket socket, IFileSystemManager fileSystemManager)
			: base(networkServer, socket)
		{
			this.connectionId = Interlocked.Increment(ref connectionIdCount);

			this.ProtocolReadLogger = new ProtocolReadLog(this.connectionId.ToString());
			this.ProtocolWriteLogger = new ProtocolWriteLog(this.connectionId.ToString());
			this.ProtocolTrafficLogger = new ProtocolTrafficLog(this.connectionId.ToString());
			
			this.FileSystemManager = fileSystemManager;

            this.ReadStream = RawReadStream;
			this.WriteStream = RawWriteStream;

			System.Reflection.AssemblyName name;

			name = GetType().Assembly.GetName();

			WriteTextBlock("NETVFS {0}.{1}", name.Version.Major, name.Version.Minor);
			
			this.binaryReadContext = new DeterministicBinaryReadContext(this);
		}
		public Connection(NetworkServer networkServer, Socket socket)
		{
			this.Socket = socket;
			this.NetworkServer = networkServer;
			readStream = new NetworkStream(socket, FileAccess.Read);
			writeStream = new NetworkStream(socket, FileAccess.Write);
		}