| |
// / This HTML file was produced by the ProjectPublisher WebService, By Asaf Shelly / //
// / WebService URL is: http://Services.AsyncOp.com/ProjectPublisher/ProjectPublisherWSvc.asmx / //
// / Learn more and find the source code here: http://AsyncOp.com / //
// PhaseStateTest00.cpp : Defines the entry point for the console application.
//
#include <Windows.h>
#include <StdIO.h>
#include <ConIO.h>
#include "LoggerAPI.h"
#include "State_Simulation.h"
////////////////////////////////////////
///
// BUFFER OBJECT
class CommBuffer: public State_Simulation
{
private:
static DWORD WINAPI GarbageCollector(CommBuffer* pCommBuffer);
public:
char Buffer[1024];
CommBuffer();
};
CommBuffer::CommBuffer(): State_Simulation(5000, "Communication Buffer")
{
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)CommBuffer::GarbageCollector,this,0,0);
SetState(1);
}
DWORD WINAPI CommBuffer::GarbageCollector(CommBuffer* pCommBuffer)
{
pCommBuffer->WaitState(CAN_DISPOSE);
// do some cleanup
memset(pCommBuffer->Buffer,0,sizeof(pCommBuffer->Buffer));
Sleep(23);
delete pCommBuffer;
return(0);
}
////////////////////////////////////////
///
// APPLICATION THREADS
DWORD WINAPI ReadSocket(CommBuffer* pCommBuffer)
{
pCommBuffer->WaitState(1);
// pretend to read from socket
for (int i=0;i<1024;i++)
pCommBuffer->Buffer[i] = i;
Sleep(1500);
pCommBuffer->SetState(2);
return(0);
}
DWORD WINAPI SaveFile(CommBuffer* pCommBuffer)
{
pCommBuffer->WaitState(3);
// pretend to write to file
for (int i=0;i<1024;i++)
Sleep(((unsigned char)pCommBuffer->Buffer[i])%5);
pCommBuffer->SetState(CommBuffer::CAN_DISPOSE);
return(0);
}
DWORD WINAPI ParseBuffer(CommBuffer* pCommBuffer)
{
pCommBuffer->WaitState(2);
// do some work with the buffer
for (int i=0;i<1024;i++)
{
if (i==pCommBuffer->Buffer[i]) { pCommBuffer->Buffer[i] = (pCommBuffer->Buffer[i]*57-3)*pCommBuffer->Buffer[i/3]; }
}
pCommBuffer->SetState(3);
return(0);
}
////////////////////////////////////////
///
// MAIN THREAD
int main(int argc, char* argv[])
{
Log("Main","Creating Object");
CommBuffer* pCommBuffer=new CommBuffer;
Log("Main","Creating Threads");
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&ReadSocket,pCommBuffer,0,0);
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&ParseBuffer,pCommBuffer,0,0);
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&SaveFile,pCommBuffer,0,0);
Log("Main","Waiting for communication to complete");
pCommBuffer->WaitState(3);
Log("Main","Back to work");
getch();
return(0);
}
////////////////////////////////////////
///
// LOG HELPER
void Log(char* obj, char* info)
{
char str[256];
sprintf(str,"[ %s ] : \"%s\"\n", obj, info);
OutputDebugString(str);
}
void Log(char* obj, char* info, int val)
{
char str[256];
sprintf(str,"[ %s ] : \"%s\" - %i\n", obj, info, val);
OutputDebugString(str);
}
|
|
|