97 lines
3.0 KiB
C#
97 lines
3.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Net.Http;
|
|
using System.Net.Sockets;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using ImGuiNET;
|
|
using SDL2Demo.Forms;
|
|
using skyscraper5.Skyscraper.Scraper;
|
|
|
|
namespace SDL2Demo.Jobs
|
|
{
|
|
internal class ScrapeFromTcp : IRenderable, IJob
|
|
{
|
|
public ScrapeFromTcp()
|
|
{
|
|
isOpen = true;
|
|
ip = "127.0.0.1";
|
|
port = 6969;
|
|
}
|
|
public bool IsOpen => isOpen;
|
|
public bool OkayButtonClicked { get; private set; }
|
|
|
|
private bool isOpen;
|
|
private string ip;
|
|
private int port;
|
|
private bool wantsCancellation;
|
|
private bool allowTimeout;
|
|
public void Render()
|
|
{
|
|
ImGui.Begin("Connect to TCP Stream", ref isOpen, ImGuiWindowFlags.AlwaysAutoResize);
|
|
|
|
ImGui.InputText("IP", ref ip, 100);
|
|
ImGui.InputInt("Port", ref port, 1, 10);
|
|
ImGui.Checkbox("Timeout", ref allowTimeout);
|
|
if (ImGui.Button("Connect"))
|
|
{
|
|
isOpen = false;
|
|
OkayButtonClicked = true;
|
|
}
|
|
|
|
ImGui.End();
|
|
}
|
|
|
|
private JobDisplay jobDisplay;
|
|
private ISkyscraperContext skyscraperContext;
|
|
public void Run()
|
|
{
|
|
JobContext.Puppets[0].AutoMoveTo(new Point(JobContext.Puppets[0].GetHomeX(), 650));
|
|
|
|
TcpClient tc;
|
|
try
|
|
{
|
|
tc = new TcpClient(ip, port);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
JobContext.MessageQueue.Enqueue(new MessageWindow(e.Message));
|
|
JobContext.Puppets[0].AutoMoveToHome();
|
|
JobContext.ReadyForNextJob = true;
|
|
return;
|
|
}
|
|
|
|
jobDisplay = new JobDisplay(JobContext);
|
|
JobContext.Puppets[0].AutoMoveTo(new Point(JobContext.Puppets[0].X, 600));
|
|
skyscraperContext = SkyscraperContextFactory.CreateSkyscraper(JobContext.ScraperEventLogger, JobContext.ScraperStorage);
|
|
skyscraperContext.UiJunction = jobDisplay;
|
|
skyscraperContext.TcpProxyEnabled = true;
|
|
skyscraperContext.EnableTimeout = allowTimeout;
|
|
skyscraperContext.TimeoutSeconds = 60;
|
|
skyscraperContext.InitalizeFilterChain();
|
|
BufferedStream bufferedStream = new BufferedStream(tc.GetStream(), 96256 * 2);
|
|
JobContext.Renderables.Add(jobDisplay);
|
|
JobContext.CanCancel = true;
|
|
skyscraperContext.IngestFromStream(bufferedStream);
|
|
skyscraperContext.Dispose();
|
|
JobContext.CanCancel = false;
|
|
|
|
tc.Close();
|
|
tc.Dispose();
|
|
JobContext.Puppets[0].AutoMoveToHome();
|
|
JobContext.ReadyForNextJob = true;
|
|
}
|
|
|
|
public void Cancel()
|
|
{
|
|
JobContext.CanCancel = false;
|
|
skyscraperContext.CancelOnNextPacket = true;
|
|
wantsCancellation = true;
|
|
}
|
|
|
|
public JobContext JobContext { get; set; }
|
|
}
|
|
}
|