public void StartListen(Action<int> readyCallback)
		{
			_dcc = new DccChat();
			_dcc.Connected += dcc_Connected;
			_dcc.Disconnected += dcc_Disconnected;
			_dcc.Error += dcc_Error;
			_dcc.MessageReceived += dcc_MessageReceived;

			try
			{
				_port = _dcc.Listen(App.Settings.Current.Dcc.LowPort, App.Settings.Current.Dcc.HighPort);
			}
			catch (InvalidOperationException)
			{
				this.Write("Error", "No available ports.");
				_port = 0;
			}

			if (App.Settings.Current.Dcc.EnableUpnp && NatHelper.IsAvailable)
			{
				this.Write("Client", "Forwarding port...");
				NatHelper.BeginAddForwardingRule(_port, System.Net.Sockets.ProtocolType.Tcp, "Floe DCC", (o) =>
				{
					this.Dispatcher.BeginInvoke((Action)(() =>
					{
						this.Write("Client", "Waiting for connection...");
						readyCallback(_port);
					}));
				});
				_isPortForwarding = true;
			}
			else
			{
				this.Write("Client", "Waiting for connection...");
				readyCallback(_port);
			}
		}
		private void AcceptChat()
		{
			_dcc = new DccChat();
			_dcc.Connected += dcc_Connected;
			_dcc.Disconnected += dcc_Disconnected;
			_dcc.Error += dcc_Error;
			_dcc.MessageReceived += dcc_MessageReceived;
			this.Write("Client", "Connecting...");
			_dcc.Connect(_address, _port);
		}