ANSC_STATUS AnscDetoStop ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PANSC_DAEMON_ENGINE_TCP_OBJECT pMyObject = (PANSC_DAEMON_ENGINE_TCP_OBJECT)hThisObject; if ( !pMyObject->bStarted ) { return ANSC_STATUS_SUCCESS; } else { pMyObject->bStarted = FALSE; } AnscWaitEvent(&pMyObject->RecvEvent, ANSC_DETO_TASK_CLEANUP_TIME); AnscWaitEvent(&pMyObject->SendEvent, ANSC_DETO_TASK_CLEANUP_TIME); pMyObject->Reset((ANSC_HANDLE)pMyObject); return ANSC_STATUS_SUCCESS; }
ANSC_STATUS AnscDetoStart ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PANSC_DAEMON_ENGINE_TCP_OBJECT pMyObject = (PANSC_DAEMON_ENGINE_TCP_OBJECT)hThisObject; if ( pMyObject->bStarted ) { return ANSC_STATUS_SUCCESS; } else { pMyObject->Reset((ANSC_HANDLE)pMyObject); pMyObject->StartTime = AnscGetTickInSecondsAbs(); pMyObject->bStarted = TRUE; } if ( TRUE ) { AnscResetEvent(&pMyObject->RecvEvent); returnStatus = AnscSpawnTask3 ( (void*)pMyObject->RecvTask, (ANSC_HANDLE)pMyObject, ANSC_DETO_RECV_TASK_NAME, ANSC_TASK_PRIORITY_NORMAL, ANSC_DETO_RECV_TASK_STACK_SIZE ); } if ( pMyObject->ControlFlags & ANSC_DETO_FLAG_ASYNC_SEND ) { AnscResetEvent(&pMyObject->SendEvent); returnStatus = AnscSpawnTask ( (void*)pMyObject->SendTask, (ANSC_HANDLE)pMyObject, ANSC_DETO_SEND_TASK_NAME ); } return ANSC_STATUS_SUCCESS; }
ANSC_STATUS AnscDetoRemove ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PANSC_DAEMON_ENGINE_TCP_OBJECT pMyObject = (PANSC_DAEMON_ENGINE_TCP_OBJECT)hThisObject; pMyObject->Stop ((ANSC_HANDLE)pMyObject); pMyObject->Reset((ANSC_HANDLE)pMyObject); AnscFreeEvent(&pMyObject->RecvEvent ); AnscFreeEvent(&pMyObject->SendEvent ); AnscFreeEvent(&pMyObject->NewSocketEvent ); AnscFreeLock (&pMyObject->RecvSocketSetLock); AnscFreeLock (&pMyObject->SendSocketSetLock); AnscFreeLock (&pMyObject->SocketTableLock ); AnscFreeLock (&pMyObject->PacketQueueLock ); AnscCoRemove((ANSC_HANDLE)pMyObject); return ANSC_STATUS_SUCCESS; }