Esempio n. 1
0
		private static void Invoke(Clone c)
		{
			Console.WriteLine("listening to port " + c.ServerPort);

			var counter__ = 0;
			var single = new object();

			c.ServerPort.ToListener(
				s =>
				{
					var counter = 0;
					lock (single)
					{
						counter__++;
						counter = counter__;

					}


					Console.WriteLine(counter + " connected");


					var target = new TcpClient();

					target.Connect(c.TargetHost, c.TargetPort);

					var target_s = target.GetStream();

					var file_RequestStream = new MemoryStream();
					var file_ResponseStream = new MemoryStream();


					#region reader
					var reader = new Action(
						delegate
						{
							var sleep = 10;

							try
							{
								while (true)
								{
									s.ReadTimeout = 500;

									var x = s.ReadByte();

									if (x < 0)
									{
										sleep--;
										if (sleep < 0)
										{
											Console.WriteLine(counter + " reader exits");
											break;
										}

										Thread.Sleep(300);
										continue;
									}

									file_RequestStream.WriteByte((byte)x);
									target_s.WriteByte((byte)x);
								}
							}
							catch
							{
								Console.WriteLine(counter + " reader failed");
							}
						}
					).TryInvokeInBackground();
					#endregion
					reader.Name = "reader." + counter;

					#region writer
					var writer = new Action(
						delegate
						{
							var sleep = 10;

							try
							{
								while (true)
								{
									var x = target_s.ReadByte();

									if (x < 0)
									{
										sleep--;
										if (sleep < 0)
										{
											Console.WriteLine(counter + " writer exits");
											break;
										}

										Thread.Sleep(300);
										continue;
									}


									s.WriteByte((byte)x);
									file_ResponseStream.WriteByte((byte)x);
								}

							}
							catch
							{
								Console.WriteLine(counter + " writer failed");
							}
						}
					).TryInvokeInBackground();
					#endregion
					writer.Name = "writer." + counter;
					Console.WriteLine(counter + " joining reader...");
					reader.Join();
					Console.WriteLine(counter + " joining writer...");
					writer.Join();


					Console.WriteLine(counter + " saving...");

					File.WriteAllBytes(counter + ".in.txt", file_RequestStream.ToArray());
					File.WriteAllBytes(counter + ".out.txt", file_ResponseStream.ToArray());

					Console.WriteLine(counter + " saved!");

					s.Close();
					target.Close();

				}
			).Join();
		}
Esempio n. 2
0
        private static void Invoke(Clone c)
        {
            Console.WriteLine("listening to port " + c.ServerPort);

            var counter__ = 0;
            var single    = new object();

            c.ServerPort.ToListener(
                s =>
            {
                var counter = 0;
                lock (single)
                {
                    counter__++;
                    counter = counter__;
                }


                Console.WriteLine(counter + " connected");


                var target = new TcpClient();

                target.Connect(c.TargetHost, c.TargetPort);

                var target_s = target.GetStream();

                var file_RequestStream  = new MemoryStream();
                var file_ResponseStream = new MemoryStream();


                #region reader
                var reader = new Action(
                    delegate
                {
                    var sleep = 10;

                    try
                    {
                        while (true)
                        {
                            s.ReadTimeout = 500;

                            var x = s.ReadByte();

                            if (x < 0)
                            {
                                sleep--;
                                if (sleep < 0)
                                {
                                    Console.WriteLine(counter + " reader exits");
                                    break;
                                }

                                Thread.Sleep(300);
                                continue;
                            }

                            file_RequestStream.WriteByte((byte)x);
                            target_s.WriteByte((byte)x);
                        }
                    }
                    catch
                    {
                        Console.WriteLine(counter + " reader failed");
                    }
                }
                    ).TryInvokeInBackground();
                #endregion
                reader.Name = "reader." + counter;

                #region writer
                var writer = new Action(
                    delegate
                {
                    var sleep = 10;

                    try
                    {
                        while (true)
                        {
                            var x = target_s.ReadByte();

                            if (x < 0)
                            {
                                sleep--;
                                if (sleep < 0)
                                {
                                    Console.WriteLine(counter + " writer exits");
                                    break;
                                }

                                Thread.Sleep(300);
                                continue;
                            }


                            s.WriteByte((byte)x);
                            file_ResponseStream.WriteByte((byte)x);
                        }
                    }
                    catch
                    {
                        Console.WriteLine(counter + " writer failed");
                    }
                }
                    ).TryInvokeInBackground();
                #endregion
                writer.Name = "writer." + counter;
                Console.WriteLine(counter + " joining reader...");
                reader.Join();
                Console.WriteLine(counter + " joining writer...");
                writer.Join();


                Console.WriteLine(counter + " saving...");

                File.WriteAllBytes(counter + ".in.txt", file_RequestStream.ToArray());
                File.WriteAllBytes(counter + ".out.txt", file_ResponseStream.ToArray());

                Console.WriteLine(counter + " saved!");

                s.Close();
                target.Close();
            }
                ).Join();
        }