Skip to content
This repository has been archived by the owner on Dec 23, 2020. It is now read-only.

Commit

Permalink
Dispatch callbacks separately from the IRC ticks. Fixes #22.
Browse files Browse the repository at this point in the history
Is this thread safe? YOLO
  • Loading branch information
voided committed Jul 14, 2018
1 parent ed1ec5e commit 4e467cf
Showing 1 changed file with 19 additions and 6 deletions.
25 changes: 19 additions & 6 deletions SteamIrcBot/Service/ServiceDispatcher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,35 +13,48 @@ class ServiceDispatcher
public static ServiceDispatcher Instance { get { return _instance; } }


Task dispatcher;
Task mainDispatcher;
Task ircDispatcher;
CancellationTokenSource cancelToken;


ServiceDispatcher()
{
cancelToken = new CancellationTokenSource();
dispatcher = new Task( ServiceTick, cancelToken.Token, TaskCreationOptions.LongRunning );
mainDispatcher = new Task(MainTick, cancelToken.Token, TaskCreationOptions.LongRunning);
ircDispatcher = new Task(IrcTick, cancelToken.Token, TaskCreationOptions.LongRunning);
}


void ServiceTick()
void MainTick()
{
while ( true )
{
if ( cancelToken.IsCancellationRequested )
break;

Steam.Instance.Tick();
IRC.Instance.Tick();
RSS.Instance.Tick();
}
}

void IrcTick()
{
while (true)
{
if (cancelToken.IsCancellationRequested)
break;

IRC.Instance.Tick();
}
}



public void Start()
{
dispatcher.Start();
mainDispatcher.Start();
ircDispatcher.Start();
}

public void Stop()
Expand All @@ -52,7 +65,7 @@ public void Stop()

public void Wait()
{
dispatcher.Wait();
Task.WaitAll(mainDispatcher, ircDispatcher);
}

}
Expand Down

0 comments on commit 4e467cf

Please sign in to comment.