Skip to content

Commit

Permalink
Hopefully fixed restart issue.
Browse files Browse the repository at this point in the history
  • Loading branch information
krisdb2009 committed Mar 7, 2024
1 parent 835801d commit f043d3c
Show file tree
Hide file tree
Showing 9 changed files with 82 additions and 39 deletions.
21 changes: 14 additions & 7 deletions Tikhole.Engine/Committer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,23 @@ public class Committer : IDisposable
private SemaphoreSlim TcpClientSemephore = new(1, 1);
public Committer()
{
Logger.Info("Starting Committer...");
InstanceID = TotalInstances++;
if (Tikhole.Matcher != null) Tikhole.Matcher.ResponseMatched += Matcher_ResponseMatched;
}
public void Dispose()
{
if (TcpClient.Connected) TcpClient.Close();
TcpClient.Dispose();
TcpClientSemephore.Dispose();
Committed = 0;
Updated = 0;
Missed = 0;
TrackList = new();
TrackListSemephore.Dispose();
TrackListSemephore = new(1, 1);
Logger.Info("Committer stopped.");
}
private void Login()
{
try
Expand Down Expand Up @@ -219,13 +233,6 @@ private string[] ListPrint(IPAddress IPAddress, string List)
}
return (v6, cidr);
}
public void Dispose()
{
Logger.Info("Disconnecting from " + RouterOSIPEndPoint.ToString() + "...");
if (TcpClient.Connected) TcpClient.Close();
TcpClient.Dispose();
TcpClientSemephore.Dispose();
}
}
public class CommitterTrackList : Hashtable
{
Expand Down
22 changes: 12 additions & 10 deletions Tikhole.Engine/Forwarder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,15 @@ public class Forwarder : IDisposable
public event EventHandler<RecievedResponseDataEventArgs>? RecievedResponseData;
public Forwarder()
{
Logger.Info("Forwarder set for " + DNSServer.ToString() + ".");
Logger.Info("Starting Forwarder: Destination set for " + DNSServer.ToString() + "...");
if (Tikhole.Listener != null) Tikhole.Listener.RecievedRequestData += Listener_RecievedRequestData;
}
public void Dispose()
{
Director.Dispose();
Director = new();
Logger.Info("Forwarder stopped.");
}
private void Listener_RecievedRequestData(object? sender, RecievedRequestDataEventArgs e)
{
if (Logger.VerboseMode) Logger.Verbose("Recieved request from " + e.IPEndPoint.ToString() + ", forwarding to " + DNSServer.ToString() + "...");
Expand All @@ -24,10 +30,6 @@ private void Listener_RecievedRequestData(object? sender, RecievedRequestDataEve
}
RecievedResponseData?.Invoke(null, new() { RecievedRequestData = e, Data = response });
}
public void Dispose()
{
Director.Dispose();
}
}
public class RecievedResponseDataEventArgs : EventArgs
{
Expand Down Expand Up @@ -57,6 +59,11 @@ public Director()
}
});
}
public void Dispose()
{
Semaphore.Dispose();
Client.Dispose();
}
public byte[]? Forward(Memory<byte> Request)
{
UInt16 ID = GetID(Request);
Expand All @@ -82,11 +89,6 @@ private UInt16 GetID(Memory<byte> Request)
{
return BitConverter.ToUInt16(Request.Span);
}
public void Dispose()
{
Semaphore.Dispose();
Client.Dispose();
}
private record Request
{
public EventWaitHandle? WaitHandle;
Expand Down
4 changes: 3 additions & 1 deletion Tikhole.Engine/Listener.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public Listener()
{
try
{
Logger.Info("Starting listnener on " + IPEndPoint.ToString() + "...");
Logger.Info("Starting Listnener on " + IPEndPoint.ToString() + "...");
Client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
Client.Client.Bind(IPEndPoint);
Task listener = new Task(() =>
Expand Down Expand Up @@ -45,6 +45,8 @@ public Listener()
public void Dispose()
{
Client.Dispose();
Requests = 0;
Logger.Info("Listener stopped.");
}
}
public class RecievedRequestDataEventArgs : EventArgs
Expand Down
21 changes: 14 additions & 7 deletions Tikhole.Engine/Matcher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,23 @@

namespace Tikhole.Engine
{
public class Matcher
public class Matcher : IDisposable
{
public static uint Matches = 0;
public static Rules Rules = new();
public event EventHandler<ResponseMatchedEventArgs>? ResponseMatched;
public event EventHandler<ParsedResponseDataEventArgs>? MatchesMatchedAndOrCommitted;
public Matcher()
{
Logger.Info("Starting Matcher...");
if (Tikhole.Parser != null) Tikhole.Parser.ParsedResponseData += Parser_ParsedResponseData;
}
public void Dispose()
{
Matches = 0;
Rules = new();
Logger.Info("Matcher stopped.");
}
private void Parser_ParsedResponseData(object? sender, ParsedResponseDataEventArgs e)
{
try
Expand Down Expand Up @@ -131,6 +138,11 @@ public RuleHashSetDownloadable(string Name, Uri Uri, System.Timers.Timer UpdateT
UpdateTimer.Start();
UpdateList();
}
public override void Dispose()
{
UpdateTimer.Stop();
UpdateTimer.Dispose();
}
public virtual void UpdateList(object? a = null, object? b = null)
{
List.Clear();
Expand All @@ -139,11 +151,6 @@ public override bool Matches(string Hostname)
{
return List.Contains(Hostname);
}
public override void Dispose()
{
UpdateTimer.Stop();
UpdateTimer.Dispose();
}
}
[Rule("Regular Expression", "Rule based off of a specified regular expression.")]
public class RuleRegex : Rule
Expand All @@ -154,11 +161,11 @@ public RuleRegex(string Name, Regex Regex) : base(Name)
{
this.Regex = Regex;
}
public override void Dispose() { }
public override bool Matches(string Hostname)
{
return Regex.IsMatch(Hostname);
}
public override void Dispose() { }
}
public abstract class RuleHashSet : Rule
{
Expand Down
7 changes: 6 additions & 1 deletion Tikhole.Engine/Parser.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
namespace Tikhole.Engine
{
public class Parser
public class Parser : IDisposable
{
public event EventHandler<ParsedResponseDataEventArgs>? ParsedResponseData;
public Parser()
{
Logger.Info("Starting Parser...");
if (Tikhole.Forwarder != null) Tikhole.Forwarder.RecievedResponseData += Forwarder_RecievedResponseData;
}
public void Dispose()
{
Logger.Info("Parser stopped.");
}
private void Forwarder_RecievedResponseData(object? sender, RecievedResponseDataEventArgs e)
{
_ = Task.Run(() => {
Expand Down
8 changes: 7 additions & 1 deletion Tikhole.Engine/Responder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,20 @@

namespace Tikhole.Engine
{
public class Responder
public class Responder : IDisposable
{
public static bool WaitForMatcherAndCommitter = true;
public Responder()
{
Logger.Info("Starting Responder...");
if (Tikhole.Forwarder != null) Tikhole.Forwarder.RecievedResponseData += Forwarder_RecievedResponseData;
if (Tikhole.Matcher != null) Tikhole.Matcher.MatchesMatchedAndOrCommitted += Matcher_MatchesMatchedAndOrCommitted;
}
public void Dispose()
{
Logger.Info("Responder stopped.");
WaitForMatcherAndCommitter = true;
}
public void Respond(Span<byte> Data, IPEndPoint IPEndPoint)
{
if (Tikhole.Listener == null) return;
Expand Down
15 changes: 9 additions & 6 deletions Tikhole.Engine/Syncer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,21 @@ public class Syncer : IDisposable
public static uint SyncerIntervalSeconds = 300;
public Syncer()
{
Logger.Info("Starting Syncer...");
Timer.Elapsed += SyncNow;
Timer.Enabled = true;
Timer.Interval = SyncerIntervalSeconds * 1000;
Timer.Start();
SyncNow();
}
public void Dispose()
{
TcpClient?.Dispose();
Timer.Stop();
Timer.Dispose();
Running = false;
Logger.Info("Syncer stopped.");
}
public async void SyncNow(object? o = null, object? e = null)
{
if (Running) return;
Expand Down Expand Up @@ -110,11 +119,5 @@ await Task.Run(() => {
});
Running = false;
}
public void Dispose()
{
TcpClient?.Dispose();
Timer.Stop();
Timer.Dispose();
}
}
}
20 changes: 16 additions & 4 deletions Tikhole.Engine/Tikhole.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public class Tikhole : IDisposable
public static Parser? Parser;
public static Matcher? Matcher;
public static Syncer? Syncer;
public static Responder? Responder;
public static Committer[]? Committers;
public static void Main()
{
Expand All @@ -30,16 +31,27 @@ public Tikhole()
Committer.TotalInstances = 0;
Committers = new Committer[Committer.NeededInstances];
for (int i = 0; i < Committer.NeededInstances; i++) Committers[i] = new Committer();
new Responder();
Responder = new Responder();
}
public void Dispose()
{
Listener?.Dispose();
foreach (Rule rule in Matcher.Rules) rule.Dispose();
Listener?.Dispose();
Listener = null;
Forwarder?.Dispose();
Forwarder = null;
Parser?.Dispose();
Parser = null;
Matcher?.Dispose();
Matcher = null;
Syncer?.Dispose();
foreach (Rule rule in Matcher.Rules) rule.Dispose();
Syncer = null;
Responder?.Dispose();
Responder = null;
if (Committers != null) foreach (Committer c in Committers) c.Dispose();
Committer.TrackList.Clear();
Committers = null;
GC.Collect(GC.MaxGeneration, GCCollectionMode.Aggressive | GCCollectionMode.Forced, true);
Logger.Info(Assembly.GetCustomAttribute<AssemblyProductAttribute>()?.Product + " stopped.");
}
}
}
3 changes: 1 addition & 2 deletions Tikhole.Website/Tikhole.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ public static void Main(string[] args)
}
public static void StopTikhole()
{
Engine.Dispose();
GC.Collect(GC.MaxGeneration, GCCollectionMode.Aggressive | GCCollectionMode.Forced, true);
Engine.Dispose();
}
public static void RestartTikhole()
{
Expand Down

0 comments on commit f043d3c

Please sign in to comment.