Input and Output data is successfully being added to the queues, but now I am having trouble with the PlayOutput and SendInput functions. It seems these functions aren't correctly looping through the queues, but I dont know.
Here is what I have so far:
struct waveBuffers
{
char data[BUFFERSIZE];
};
waveBuffers InQueue[MAX_BUFFERS];
waveBuffers OutQueue[MAX_BUFFERS];
int In,Out;
int WriteIndex = 0;
int ReadIndex = 0;
int WriteIndex2=0;
int ReadIndex2=0;
DWORD WINAPI FillInput(LPVOID lpParameter)
{
char data[BUFFERSIZE];
int a;
while(threadEnd == false)
{
if ( (WriteIndex2 + 1) % MAX_BUFFERS != ReadIndex2)
{
sound.GetInput(data);
strcpy(InQueue[WriteIndex2].data,data);
WriteIndex2 = (WriteIndex2 + 1) % MAX_BUFFERS;
}
}
return 0;
}
DWORD WINAPI FillOutput(LPVOID lpParameter)
{
char data[BUFFERSIZE];
int addrlen=sizeof(sin),a;
while(threadEnd == false)
{
if ( (WriteIndex + 1) % MAX_BUFFERS != ReadIndex)
{
recvfrom(client,data,sizeof(data),0,(struct sockaddr*)&sin,&addrlen);
strcpy(OutQueue[WriteIndex].data,data);
WriteIndex = (WriteIndex + 1) % MAX_BUFFERS;
}
}
return 0;
}
DWORD WINAPI PlayOutput(LPVOID lpParameter)
{
char data[BUFFERSIZE];
int a;
while(threadEnd == false)
{
for(a=WriteIndex; a<=ReadIndex; a++) //set 'a' equal to WriteIndex
{
sound.Play(OutQueue[a].data);
ZeroMemory(OutQueue[a].data, BUFFERSIZE);
}
}
return 0;
}
DWORD WINAPI SendInput(LPVOID lpParameter)
{
char data[BUFFERSIZE];
int a;
while(threadEnd == false)
{
for(a=WriteIndex2; a<=ReadIndex2; a++) //set 'a' equal to WriteIndex2
{
sendto(client,InQueue[a].data,sizeof(InQueue[a].data),0,(struct sockaddr*)&sin,sizeof(sin));
ZeroMemory(InQueue[a].data, BUFFERSIZE);
}
}
return 0;
}