81 lines
3.0 KiB
Plaintext
81 lines
3.0 KiB
Plaintext
|
using System;
|
||
|
using System.Linq;
|
||
|
using System.Net;
|
||
|
using System.Net.Sockets;
|
||
|
using System.Threading;
|
||
|
using AniNIX.Shared;
|
||
|
|
||
|
namespace AniNIX.TheRaven {
|
||
|
|
||
|
//TODO Add comments
|
||
|
|
||
|
//IRC messages are a primitive data type for us to use.
|
||
|
public class RavenNetListener {
|
||
|
|
||
|
private String _key;
|
||
|
private Connection _ircdConnection;
|
||
|
|
||
|
private void _RavenSend(Connection ircdConnection, String channel, String message) {
|
||
|
|
||
|
IRCClientMessage ircMessage = new IRCClientMessage();
|
||
|
ircMessage.PrivMsg(message,channel);
|
||
|
ircdConnection.Write(ircMessage);
|
||
|
}
|
||
|
|
||
|
private void _netThread() {
|
||
|
while (true) {
|
||
|
try
|
||
|
{
|
||
|
// Open a new listener on localhost port 9501
|
||
|
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
|
||
|
TcpListener listener = new TcpListener(ipAddress, 9501);
|
||
|
listener.Start();
|
||
|
// Accept all connections
|
||
|
while (true)
|
||
|
{
|
||
|
Socket client = listener.AcceptSocket();
|
||
|
byte[] data = new byte[512];
|
||
|
int size = client.Receive(data);
|
||
|
// Receive and parse string.
|
||
|
string received = "";
|
||
|
for (int i = 0; i < size; i++)
|
||
|
received += Convert.ToChar(data[i]);
|
||
|
String[] bySpace = received.Split(' ');
|
||
|
// If the key matches, ...
|
||
|
if (this._key.Equals(bySpace[0])) {
|
||
|
ReportMessage.Log(Verbosity.Verbose,"Accepted passphrase -- sending message.");
|
||
|
String channel = bySpace[1];
|
||
|
String message = String.Join(" ",bySpace.Skip(2).ToArray());
|
||
|
// Send to IRC
|
||
|
_RavenSend(_ircdConnection,channel,message);
|
||
|
|
||
|
} else {
|
||
|
ReportMessage.Log(Verbosity.Error,"Passphrase rejected for NetListener connection.");
|
||
|
}
|
||
|
//Clean up
|
||
|
client.Close();
|
||
|
}
|
||
|
}
|
||
|
// If we got here, something went wrong. Log.
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
ReportMessage.Log(Verbosity.Error,String.Format("RavenNetListener died for unknown reason: {0}",e.Message));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void NetListener(Connection ircdConnection) {
|
||
|
this._ircdConnection = ircdConnection;
|
||
|
ReportMessage.Log(Verbosity.Verbose,"Starting NetListener thread...");
|
||
|
ThreadStart netListenerWorker = _netThread;
|
||
|
Thread netListenerThread = new Thread(netListenerWorker);
|
||
|
netListenerThread.Start();
|
||
|
ReportMessage.Log(Verbosity.Verbose,"Started.");
|
||
|
}
|
||
|
|
||
|
public RavenNetListener(String key) {
|
||
|
this._key = key;
|
||
|
}
|
||
|
}
|
||
|
}
|