Reseter2/Reseter2/ReseteTask.cs

126 lines
3.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Reseter2.History;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Threading.Tasks;
namespace Reseter2
{
class ReseterTask
{
private Task<PingResult> task;
public DateTime StartTime = DateTime.Now;
public IComp Comp { get; }
public AStatusTask StatusTask { get; set; }
public TaskControl taskControl;
private Pinger Pingers;
public Stopwatch sw = new Stopwatch();
public PingResult pingResult;
public HistoryItem historyItem;
public ReseterTask(IComp comp, TaskControl taskCntrl)
{
Comp = comp;
taskControl = taskCntrl;
if (comp.GetResetName() == null || comp.GetResetName().Length == 0)
{
//Pingers = new Pinger("");
Comp.SetName("Не заданно");
Comp.SetNetName("Не заданно");
Pingers = new Pinger(Comp.GetResetName());
StatusTask = new StatusPreReboot(this);
historyItem = HistoryList.Add(this);
StatusTask = new StatusRebootError(this, "Uncorrect");
}
else
{
Pingers = new Pinger(Comp.GetResetName());
StatusTask = new StatusPreReboot(this);
historyItem = HistoryList.Add(this);
}
}
public async Task Tick()
{
if (task != null)
{
if (task.IsCompleted){
//this.DataContrl(Ping().ToString(), Timeout().ToString());
pingResult = await task;
string p;
if (pingResult.TimedOut)
{
p = "----";
}
else
{
p = pingResult.Ping.ToString() + "ms";
}
if (pingResult.Ip != null) Comp.SetIP(pingResult.Ip);
taskControl.DataContrl(p, pingResult.TimeoutPing.ToString(), pingResult.Ip, Comp.GetNetName() , sw.Elapsed);
StatusTask.Next();
task = Task.Run(StatusTask.Tick);
}
}
else
{
task = Task.Run(StatusTask.Tick);
}
taskControl.TimeContrl(sw.Elapsed);
}
public string GetName()
{
return Comp.GetName();
}
public void RebootStop()
{
StatusTask.Stop();
}
public void RebootReturn()
{
StatusTask.RebootReturn();
}
public void SetNameStage(string nameStage, int indexImg, bool pauseOn = true)
{
taskControl.SetNameStage(nameStage, indexImg, pauseOn);
}
public PingResult Ping()
{
return Pingers.PingHost();
}
public int Timeout() {
return Pingers.Timeout();
}
public void DataContrl(string ping, string timeout)
{
// taskControl.Invoke(DataChange);
// DataChange.Invoke(ping, timeout);
}
private void Clear()
{
Reseter.Clear(this, taskControl);
}
}
}