Just so you know, you're dealing with a professional coder, so I'll know exactly what needs to be done and can explain it in great detail :-) I work well with others.
What I'm looking for is simple but requires a bit of "busy work", unless you can use a lightweight IRC plugin pre-made which I'm not opposed to as long as it is portable.
I need a DLL compiled to my specifications (with my provided source code) that has the following functions. These functions are meant to be ran from a third party application by loading it dynamically. You will need to save some information in local variables and arrays, and they will be read by calling functions in the DLL as well.
**Functions are BELOW in the "advanced" section as well as all comments necessary to help you understand each function that I need.**
Achieve this however you want to, this is all pseudo code. It is super easy, and just needs to follow standard IRC protocol. There may even be some IRC libraries out there in existance...you can use them if you'd like, just so long as they're portable, and the functions are very similar to what you see below.
I can help however you need to. This is a RUSH job, so the quicker the better (a day or two), so bid according!!!
**(Remember, see below for actual pseudo code)**
-Kevin
## Deliverables
Here is the full written rundown..should be very basic and easy to do if you know IRC and socket programming, or you are familiar with a library that does:
/*
This is how I'll be passing you arrays..in the
structure arrStr. So you can simply do:
arrStr *newArr;
Then access or modify the array like this:
newArr[x] = Y
len is the length of the array
*/
struct arrStr
{
int len;
char *string;
};
int connectToIRC(char *server, int port)
{
/*
Connect to IRC server. Return negative number if
not possible, and return the connection socket if
successfully connected and ready to join a channel.
*/
return(SOCKET_OF_CONNECTION);
}
int joinIRCChannel(int socket, char *channel)
{
/*
Send the command to join a channel and monitor
the response to make sure that we have successfully
joined the IRC channel.
Once joined, you can save the IRC channel or
whatever information you need to set as "joined"
locally, that way it can be called on later when I
want a list of what chat rooms I am joined to.
Return -1 if you can't join, saving the actual reason
from the server in a global string. That way, I can call
a function later and get the last saved string, just like
GetLastError()
If joined, the offset of the IRC channel in a 0 offset is
returned, so I can access each channel's queue by this number as
if it's an offset in an array.
So, if "joinIRCChannel()" returns 5 when channel = "#chat", then I would call
getChannelQueue(5) to get my current queue of messages for "#chat".
*/
}
int callRecvFunction(int socket, arrStr arr)
{
int num = 0;
/*
This will be the raw receive function for the socket
that will call recv(), run an active filter for each
IRC channel we are joined in (added to array in joinIRCChannel
upon successful join) and put the messages in global
arrays separated by channel, so they may be called on
with later functions.
This function is called frequently (every 1/10th of a second
at it's slowest) and is intended to be the engine behind this
method.
Example pseudo code of this function:
char *recv = receiveFromServer(socket):
for(i = 0; i < totalJoinedChannels; i++)
{
if(thisMessageBelongsToChannel(globalJoinedChannels[i],recv)
{
//Packet in "recv" belongs to global channel with offset "i" -- we are searching all channels to see if it is a "say" packet
//thisPacketBelongsToChannel() ONLY returns true if it is a MESSAGE
// packet.. in other words, I don't want ANY messages to save
// in the global variable unless they are simple /say chat messages to
// the channel by any user in the chat room
//Put the message in the array in this format:
// "[NickName] Message Here"
}
}
*/
}
int getChannelQueue(int channelNumber, arrStr copyArray)
{
//Find which channel number belongs to what channel
//Then, check the array for that specfic channel of all "say" messages since last getChannelQueue() call on this channel number
//copy each element of this array into copyArray (can be written simply by strcpy(copyArray[x],globalArr[channelNumber][x]) for
example)
//Return the number of elements are in copyArray
//Return -1 if failed somehow (not in this channel currently), and 0 if there are no messages
//Make sure to erase the channel array, so if getChannelQueue is called immediately after with same channel number,
//it will return "0"
}
int getListOfChannels(arrStr copyArray)
{
//Return a lsit of channels currently joined by copying all channels into copyArray and returning the number of channels
//Use same method of copying into array as getChannelQueue().
}
int leaveChannel(int channelInt)
{
//Part from channel from channel integer
//return 0 for successful leave, -1 for not. Use a getlasterror method for text based errors from server
}