/*****************************************************************************
*
* FILE NAME:    PollThread1.c
*
* DESCRIPTION:  ポーリングのためのモジュール PollThread1.
*
\*****************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <rt.h>
#include <winerror.h>

#include "SampleAPP.h"

#include "CbService.h"
#include "CbController.h"
#include "CbExtension.h"
#include "CbFile.h"
#include "CbRobot.h"
#include "CbTask.h"
#include "CbVariable.h"
#include "CbCommand.h"
#include "CbMessage.h"

char m_strTest[5] = "test";


/*****************************************************************************
*
* FUNCTION:		PollThread1
*
* PARAMETERS:	なし
*
* RETURNS:		なし
*
* DESCRIPTION:  Tポーリングスレッド PollThread1.
\*****************************************************************************/


void PollThread1(void)
{
	int a;
	BOOL bExit = FALSE;
	HRESULT hr;

	// RSLへコールバック関数設定
	hr = InitCallback();

	// RSL Listening開始
	ListenerStart();
	PrintLog(LOG_DEBUG, "debug  : Listener status = %d \n", ListenerGetStatus());
	PrintLog(LOG_DEBUG, "\n\n");

	while (1)
	{
		scanf("%d", &a);
		switch (a) {
		case 1:		// Start
			ListenerStart();
			PrintLog(LOG_DEBUG, "debug  : Listener status = %d \n", ListenerGetStatus());
			PrintLog(LOG_DEBUG, "\n\n");
			break;
		case 2:		// Stop
			ListenerStop();
			PrintLog(LOG_DEBUG, "debug  : Listener status = %d \n", ListenerGetStatus());
			PrintLog(LOG_DEBUG, "\n\n");
			break;
		case 3:		// Exit
			bExit = TRUE;
			break;
		default:
			break;
		}

		if (bExit) {
			break;
		}
		RtSleep(1000);
	}

	// RSL Listening停止
	ListenerStop();
	PrintLog(LOG_DEBUG, "debug  : Listener status = %d \n", ListenerGetStatus());
	ExitApp();
}

HRESULT InitCallback(void)
{
	HRESULT hr;

	/**********************************************
	 * 使用しないコールバック関数は登録しなくてOK *
	 * 第三引数は使用しない場合はNULL指定         *
	 **********************************************/

	// Service
	hr = ListenerSetCallbackFunc(ID_SERVICE_START, ServiceStart, m_strTest);
	hr = ListenerSetCallbackFunc(ID_SERVICE_STOP, ServiceStop, NULL);
	// Controller
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_CONNECT, ControllerConnect, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_DISCONNECT, ControllerDisconnect, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_GETEXTENSION, ControllerGetextension, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_GETFILE, ControllerGetfile, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_GETROBOT, ControllerGetrobot, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_GETTASK, ControllerGettask, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_GETVARIABLE, ControllerGetvariable, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_GETCOMMAND, ControllerGetcommand, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_GETEXTENSIONNAMES, ControllerGetextensionnames, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_GETFILENAMES, ControllerGetfilenames, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_GETROBOTNAMES, ControllerGetrobotnames, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_GETTASKNAMES, ControllerGettasknames, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_GETVARIABLENAMES, ControllerGetvariablenames, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_GETCOMMANDNAMES, ControllerGetcommandnames, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_EXECUTE, ControllerExecute, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_GETMESSAGE, ControllerGetmessage, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_GETATTRIBUTE, ControllerGetattribute, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_GETHELP, ControllerGethelp, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_GETNAME, ControllerGetname, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_GETTAG, ControllerGettag, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_PUTTAG, ControllerPuttag, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_GETID, ControllerGetid, NULL);
	hr = ListenerSetCallbackFunc(ID_CONTROLLER_PUTID, ControllerPutid, NULL);
	// Extension
	hr = ListenerSetCallbackFunc(ID_EXTENSION_GETVARIABLE, ExtensionGetvariable, NULL);
	hr = ListenerSetCallbackFunc(ID_EXTENSION_GETVARIABLENAMES, ExtensionGetvariablenames, NULL);
	hr = ListenerSetCallbackFunc(ID_EXTENSION_EXECUTE, ExtensionExecute, NULL);
	hr = ListenerSetCallbackFunc(ID_EXTENSION_GETATTRIBUTE, ExtensionGetattribute, NULL);
	hr = ListenerSetCallbackFunc(ID_EXTENSION_GETHELP, ExtensionGethelp, NULL);
	hr = ListenerSetCallbackFunc(ID_EXTENSION_GETNAME, ExtensionGetname, NULL);
	hr = ListenerSetCallbackFunc(ID_EXTENSION_GETTAG, ExtensionGettag, NULL);
	hr = ListenerSetCallbackFunc(ID_EXTENSION_PUTTAG, ExtensionPuttag, NULL);
	hr = ListenerSetCallbackFunc(ID_EXTENSION_GETID, ExtensionGetid, NULL);
	hr = ListenerSetCallbackFunc(ID_EXTENSION_PUTID, ExtensionPutid, NULL);
	hr = ListenerSetCallbackFunc(ID_EXTENSION_RELEASE, ExtensionRelease, NULL);
	// File
	hr = ListenerSetCallbackFunc(ID_FILE_GETFILE, FileGetfile, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_GETVARIABLE, FileGetvariable, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_GETFILENAMES, FileGetfilenames, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_GETVARIABLENAMES, FileGetvariablenames, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_EXECUTE, FileExecute, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_COPY, FileCopy, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_DELETE, FileDelete, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_MOVE, FileMove, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_RUN, FileRun, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_GETDATECREATED, FileGetdatecreated, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_GETDATELASTACCESSED, FileGetdatelastaccessed, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_GETDATELASTMODIFIED, FileGetdatelastmodified, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_GETPATH, FileGetpath, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_GETSIZE, FileGetsize, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_GETTYPE, FileGettype, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_GETVALUE, FileGetvalue, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_PUTVALUE, FilePutvalue, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_GETATTRIBUTE, FileGetattribute, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_GETHELP, FileGethelp, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_GETNAME, FileGetname, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_GETTAG, FileGettag, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_PUTTAG, FilePuttag, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_GETID, FileGetid, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_PUTID, FilePutid, NULL);
	hr = ListenerSetCallbackFunc(ID_FILE_RELEASE, FileRelease, NULL);
	// Robot
	hr = ListenerSetCallbackFunc(ID_ROBOT_GETVARIABLE, RobotGetvariable, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_GETVARIABLENAMES, RobotGetvariablenames, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_EXECUTE, RobotExecute, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_ACCELERATE, RobotAccelerate, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_CHANGE, RobotChange, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_CHUCK, RobotChuck, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_DRIVE, RobotDrive, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_GOHOME, RobotGohome, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_HALT, RobotHalt, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_HOLD, RobotHold, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_MOVE, RobotMove, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_ROTATE, RobotRotate, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_SPEED, RobotSpeed, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_UNCHUCK, RobotUnchuck, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_UNHOLD, RobotUnhold, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_GETATTRIBUTE, RobotGetattribute, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_GETHELP, RobotGethelp, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_GETNAME, RobotGetname, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_GETTAG, RobotGettag, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_PUTTAG, RobotPuttag, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_GETID, RobotGetid, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_PUTID, RobotPutid, NULL);
	hr = ListenerSetCallbackFunc(ID_ROBOT_RELEASE, RobotRelease, NULL);
	// Task
	hr = ListenerSetCallbackFunc(ID_TASK_GETVARIABLE, TaskGetvariable, NULL);
	hr = ListenerSetCallbackFunc(ID_TASK_GETVARIABLENAMES, TaskGetvariablenames, NULL);
	hr = ListenerSetCallbackFunc(ID_TASK_EXECUTE, TaskExecute, NULL);
	hr = ListenerSetCallbackFunc(ID_TASK_START, TaskStart, NULL);
	hr = ListenerSetCallbackFunc(ID_TASK_STOP, TaskStop, NULL);
	hr = ListenerSetCallbackFunc(ID_TASK_DELETE, TaskDelete, NULL);
	hr = ListenerSetCallbackFunc(ID_TASK_GETFILENAME, TaskGetfilename, NULL);
	hr = ListenerSetCallbackFunc(ID_TASK_GETATTRIBUTE, TaskGetattribute, NULL);
	hr = ListenerSetCallbackFunc(ID_TASK_GETHELP, TaskGethelp, NULL);
	hr = ListenerSetCallbackFunc(ID_TASK_GETNAME, TaskGetname, NULL);
	hr = ListenerSetCallbackFunc(ID_TASK_GETTAG, TaskGettag, NULL);
	hr = ListenerSetCallbackFunc(ID_TASK_PUTTAG, TaskPuttag, NULL);
	hr = ListenerSetCallbackFunc(ID_TASK_GETID, TaskGetid, NULL);
	hr = ListenerSetCallbackFunc(ID_TASK_PUTID, TaskPutid, NULL);
	hr = ListenerSetCallbackFunc(ID_TASK_RELEASE, TaskRelease, NULL);
	// Variable
	hr = ListenerSetCallbackFunc(ID_VARIABLE_GETDATETIME, VariableGetdatetime, NULL);
	hr = ListenerSetCallbackFunc(ID_VARIABLE_GETVALUE, VariableGetvalue, NULL);
	hr = ListenerSetCallbackFunc(ID_VARIABLE_PUTVALUE, VariablePutvalue, NULL);
	hr = ListenerSetCallbackFunc(ID_VARIABLE_GETATTRIBUTE, VariableGetattribute, NULL);
	hr = ListenerSetCallbackFunc(ID_VARIABLE_GETHELP, VariableGethelp, NULL);
	hr = ListenerSetCallbackFunc(ID_VARIABLE_GETNAME, VariableGetname, NULL);
	hr = ListenerSetCallbackFunc(ID_VARIABLE_GETTAG, VariableGettag, NULL);
	hr = ListenerSetCallbackFunc(ID_VARIABLE_PUTTAG, VariablePuttag, NULL);
	hr = ListenerSetCallbackFunc(ID_VARIABLE_GETID, VariableGetid, NULL);
	hr = ListenerSetCallbackFunc(ID_VARIABLE_PUTID, VariablePutid, NULL);
	hr = ListenerSetCallbackFunc(ID_VARIABLE_GETMICROSECOND, VariableGetmicrosecond, NULL);
	hr = ListenerSetCallbackFunc(ID_VARIABLE_RELEASE, VariableRelease, NULL);
	// Command.
	hr = ListenerSetCallbackFunc(ID_COMMAND_EXECUTE, CommandExecute, NULL);
	hr = ListenerSetCallbackFunc(ID_COMMAND_CANCEL, CommandCancel, NULL);
	hr = ListenerSetCallbackFunc(ID_COMMAND_GETTIMEOUT, CommandGettimeout, NULL);
	hr = ListenerSetCallbackFunc(ID_COMMAND_PUTTIMEOUT, CommandPuttimeout, NULL);
	hr = ListenerSetCallbackFunc(ID_COMMAND_GETSTATE, CommandGetstate, NULL);
	hr = ListenerSetCallbackFunc(ID_COMMAND_GETPARAMETERS, CommandGetparameters, NULL);
	hr = ListenerSetCallbackFunc(ID_COMMAND_PUTPARAMETERS, CommandPutparameters, NULL);
	hr = ListenerSetCallbackFunc(ID_COMMAND_GETRESULT, CommandGetresult, NULL);
	hr = ListenerSetCallbackFunc(ID_COMMAND_GETATTRIBUTE, CommandGetattribute, NULL);
	hr = ListenerSetCallbackFunc(ID_COMMAND_GETHELP, CommandGethelp, NULL);
	hr = ListenerSetCallbackFunc(ID_COMMAND_GETNAME, CommandGetname, NULL);
	hr = ListenerSetCallbackFunc(ID_COMMAND_GETTAG, CommandGettag, NULL);
	hr = ListenerSetCallbackFunc(ID_COMMAND_PUTTAG, CommandPuttag, NULL);
	hr = ListenerSetCallbackFunc(ID_COMMAND_GETID, CommandGetid, NULL);
	hr = ListenerSetCallbackFunc(ID_COMMAND_PUTID, CommandPutid, NULL);
	hr = ListenerSetCallbackFunc(ID_COMMAND_RELEASE, CommandRelease, NULL);
	// Message
	hr = ListenerSetCallbackFunc(ID_MESSAGE_REPLY, MessageReply, NULL);
	hr = ListenerSetCallbackFunc(ID_MESSAGE_CLEAR, MessageClear, NULL);
	hr = ListenerSetCallbackFunc(ID_MESSAGE_GETDATETIME, MessageGetdatetime, NULL);
	hr = ListenerSetCallbackFunc(ID_MESSAGE_GETDESCRIPTION, MessageGetdescription, NULL);
	hr = ListenerSetCallbackFunc(ID_MESSAGE_GETDESTINATION, MessageGetdestination, NULL);
	hr = ListenerSetCallbackFunc(ID_MESSAGE_GETNUMBER, MessageGetnumber, NULL);
	hr = ListenerSetCallbackFunc(ID_MESSAGE_GETSERIALNUMBER, MessageGetserialnumber, NULL);
	hr = ListenerSetCallbackFunc(ID_MESSAGE_GETSOURCE, MessageGetsource, NULL);
	hr = ListenerSetCallbackFunc(ID_MESSAGE_GETVALUE, MessageGetvalue, NULL);
	hr = ListenerSetCallbackFunc(ID_MESSAGE_RELEASE, MessageRelease, NULL);

	return S_OK;
}
