mirror of
https://github.com/deavmi/birchwood
synced 2024-09-20 09:23:38 +02:00
Implemented proof-of-concept eventy integration with a default event handler
This commit is contained in:
parent
c3ec3b7fe7
commit
e4bb38c766
2
dub.json
2
dub.json
@ -4,7 +4,7 @@
|
|||||||
],
|
],
|
||||||
"copyright": "Copyright © 2022, Tristan B. Kildaire",
|
"copyright": "Copyright © 2022, Tristan B. Kildaire",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"eventy": "~>0.2.5"
|
"eventy": "0.2.5"
|
||||||
},
|
},
|
||||||
"description": "A sane IRC framework for the D language",
|
"description": "A sane IRC framework for the D language",
|
||||||
"license": "LGPL-3.0",
|
"license": "LGPL-3.0",
|
||||||
|
@ -7,6 +7,7 @@ import std.container.slist : SList;
|
|||||||
import core.sync.mutex : Mutex;
|
import core.sync.mutex : Mutex;
|
||||||
import core.thread : Thread, dur;
|
import core.thread : Thread, dur;
|
||||||
import std.string;
|
import std.string;
|
||||||
|
import eventy;
|
||||||
|
|
||||||
// TODO: Remove this import
|
// TODO: Remove this import
|
||||||
import std.stdio : writeln;
|
import std.stdio : writeln;
|
||||||
@ -54,6 +55,7 @@ public struct ConnectionInfo
|
|||||||
/* TODO: Make final/const (find out difference) */
|
/* TODO: Make final/const (find out difference) */
|
||||||
private ulong bulkReadSize;
|
private ulong bulkReadSize;
|
||||||
|
|
||||||
|
/* TODO: before publishing change this bulk size */
|
||||||
private this(Address addrInfo, string nickname, ulong bulkReadSize = 20)
|
private this(Address addrInfo, string nickname, ulong bulkReadSize = 20)
|
||||||
{
|
{
|
||||||
this.addrInfo = addrInfo;
|
this.addrInfo = addrInfo;
|
||||||
@ -137,6 +139,9 @@ public class Client
|
|||||||
private Mutex recvQueueLock, sendQueueLock;
|
private Mutex recvQueueLock, sendQueueLock;
|
||||||
private Thread recvHandler, sendHandler;
|
private Thread recvHandler, sendHandler;
|
||||||
|
|
||||||
|
/* Event engine */
|
||||||
|
private Engine engine;
|
||||||
|
|
||||||
this(ConnectionInfo connInfo)
|
this(ConnectionInfo connInfo)
|
||||||
{
|
{
|
||||||
this.connInfo = connInfo;
|
this.connInfo = connInfo;
|
||||||
@ -147,6 +152,56 @@ public class Client
|
|||||||
//TODO: Do something here, tare downs
|
//TODO: Do something here, tare downs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class IRCEvent : Event
|
||||||
|
{
|
||||||
|
private string message;
|
||||||
|
|
||||||
|
this(ulong typeID, ubyte[] payload)
|
||||||
|
{
|
||||||
|
super(typeID, payload);
|
||||||
|
|
||||||
|
/* TODFO: actuially parse message here */
|
||||||
|
this.message = cast(string)payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string getMessage()
|
||||||
|
{
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initEvents()
|
||||||
|
{
|
||||||
|
/* TODO: For now we just register one signal type for all messages */
|
||||||
|
ulong signalDefault = 1;
|
||||||
|
engine.addQueue(signalDefault);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* TODO: We also add default signal handler which will just print stuff out */
|
||||||
|
class SignalHandler1 : Signal
|
||||||
|
{
|
||||||
|
this()
|
||||||
|
{
|
||||||
|
super([1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void handler(Event e)
|
||||||
|
{
|
||||||
|
/* TODO: Insert cast here to our custoim type */
|
||||||
|
IRCEvent ircEvent = cast(IRCEvent)e;
|
||||||
|
assert(ircEvent); //Should never fail, unless some BOZO regged multiple handles for 1 - wait idk does eventy do that even mmm
|
||||||
|
import std.stdio;
|
||||||
|
writeln("IRCEvent (id): "~to!(string)(ircEvent.id));
|
||||||
|
writeln("IRCEvent (payload): "~to!(string)(ircEvent.getMessage));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Signal j = new SignalHandler1();
|
||||||
|
engine.addSignalHandler(j);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Connects to the server
|
* Connects to the server
|
||||||
*/
|
*/
|
||||||
@ -164,12 +219,21 @@ public class Client
|
|||||||
this.recvQueueLock = new Mutex();
|
this.recvQueueLock = new Mutex();
|
||||||
this.sendQueueLock = new Mutex();
|
this.sendQueueLock = new Mutex();
|
||||||
|
|
||||||
|
/* Start the event engine */
|
||||||
|
this.engine = new Engine();
|
||||||
|
this.engine.start();
|
||||||
|
|
||||||
|
/* Regsiter default handler */
|
||||||
|
initEvents();
|
||||||
|
|
||||||
/* TODO: Clean this up and place elsewhere */
|
/* TODO: Clean this up and place elsewhere */
|
||||||
this.recvHandler = new Thread(&recvHandlerFunc);
|
this.recvHandler = new Thread(&recvHandlerFunc);
|
||||||
this.recvHandler.start();
|
this.recvHandler.start();
|
||||||
|
|
||||||
this.sendHandler = new Thread(&sendHandlerFunc);
|
this.sendHandler = new Thread(&sendHandlerFunc);
|
||||||
this.sendHandler.start();
|
this.sendHandler.start();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
catch(SocketOSException e)
|
catch(SocketOSException e)
|
||||||
{
|
{
|
||||||
@ -239,6 +303,13 @@ public class Client
|
|||||||
/* TODO: Implement me */
|
/* TODO: Implement me */
|
||||||
private void parseReceivedMessage(string message)
|
private void parseReceivedMessage(string message)
|
||||||
{
|
{
|
||||||
|
/* TODO: testing */
|
||||||
|
Event eTest = new IRCEvent(1, cast(ubyte[])message);
|
||||||
|
engine.push(eTest);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Command */
|
/* Command */
|
||||||
string command;
|
string command;
|
||||||
|
|
||||||
@ -593,7 +664,7 @@ public class Client
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* TODO: Yield here and in other places before continue */
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user