public void WorkerProcessMain(string argument, string passwordBase64)
		{
			int port = int.Parse(argument, CultureInfo.InvariantCulture);
			
			client = new TcpClient();
			client.Connect(new IPEndPoint(IPAddress.Loopback, port));
			Stream stream = client.GetStream();
			receiver = new PacketReceiver();
			sender = new PacketSender(stream);
			shutdownEvent = new ManualResetEvent(false);
			receiver.ConnectionLost += OnConnectionLost;
			receiver.PacketReceived += OnPacketReceived;
			sender.WriteFailed += OnConnectionLost;
			
			// send password
			sender.Send(Convert.FromBase64String(passwordBase64));
			
			receiver.StartReceive(stream);
			while (!shutdownEvent.WaitOne(SendKeepAliveInterval, false)) {
				Program.Log("Sending keep-alive packet");
				sender.Send(new byte[0]);
			}
			
			Program.Log("Closing client (end of WorkerProcessMain)");
			client.Close();
			shutdownEvent.Close();
		}
Exemple #2
0
        public void WorkerProcessMain(string argument, string passwordBase64)
        {
            int port = int.Parse(argument, CultureInfo.InvariantCulture);

            client = new TcpClient();
            client.Connect(new IPEndPoint(IPAddress.Loopback, port));
            Stream stream = client.GetStream();

            receiver                 = new PacketReceiver();
            sender                   = new PacketSender(stream);
            shutdownEvent            = new ManualResetEvent(false);
            receiver.ConnectionLost += OnConnectionLost;
            receiver.PacketReceived += OnPacketReceived;
            sender.WriteFailed      += OnConnectionLost;

            // send password
            sender.Send(Convert.FromBase64String(passwordBase64));

            receiver.StartReceive(stream);
            while (!shutdownEvent.WaitOne(SendKeepAliveInterval, false))
            {
                Program.Log("Sending keep-alive packet");
                sender.Send(new byte[0]);
            }

            Program.Log("Closing client (end of WorkerProcessMain)");
            client.Close();
            shutdownEvent.Close();
        }
        void OnAcceptTcpClient(IAsyncResult ar)
        {
            clientAuthenticated = false;
            SetTimeout();
            try {
                client = listener.EndAcceptTcpClient(ar);
            } catch (SocketException) {
                // error connecting
            }
            listener.Stop();
            listener = null;

            if (client == null)
            {
                OnConnectionLost(null, null);
            }
            else
            {
                Stream stream = client.GetStream();
                receiver = new PacketReceiver();
                sender   = new PacketSender(stream);
                receiver.ConnectionLost += OnConnectionLost;
                receiver.PacketReceived += OnPacketReceived;

                receiver.StartReceive(stream);
                OnReady();
            }
        }
		void OnAcceptTcpClient(IAsyncResult ar)
		{
			clientAuthenticated = false;
			SetTimeout();
			try {
				client = listener.EndAcceptTcpClient(ar);
			} catch (SocketException) {
				// error connecting
			}
			listener.Stop();
			listener = null;
			
			if (client == null) {
				OnConnectionLost(null, null);
			} else {
				Stream stream = client.GetStream();
				receiver = new PacketReceiver();
				sender = new PacketSender(stream);
				receiver.ConnectionLost += OnConnectionLost;
				receiver.PacketReceived += OnPacketReceived;
				
				receiver.StartReceive(stream);
				OnReady();
			}
		}