#include "samplesubscription.h"
#include <stdlib.h>
#include <opcua_datetime.h>
#include <opcua_memory.h>
OpcUa_Void *a_pUserData)
{
SampleSubscription *pSampleSubscription = a_pUaSubscription->
pUserData;
OpcUa_ReferenceParameter(a_pResponseHeader);
OpcUa_ReferenceParameter(a_pUserData);
if (OpcUa_IsGood(a_status))
{
printf("SampleSubscription_Created_CB succeeded (0x%08x)\n", a_status);
if (pSampleSubscription->State == State_SampleSubscription_SubscriptionCreate)
pSampleSubscription->State = State_SampleSubscription_SubscriptionCreateDone;
else
pSampleSubscription->State = State_SampleSubscription_Error;
}
else
{
printf("SampleSubscription_Created_CB failed (0x%08x)\n", a_status);
pSampleSubscription->State = State_SampleSubscription_Error;
}
}
OpcUa_Void *a_pUserData)
{
SampleSubscription *pSampleSubscription = a_pUaSubscription->
pUserData;
OpcUa_ReferenceParameter(a_pResponseHeader);
OpcUa_ReferenceParameter(a_pUserData);
if (OpcUa_IsGood(a_status))
{
printf("SampleSubscription_Deleted_CB succeeded (0x%08x)\n", a_status);
if (pSampleSubscription->State == State_SampleSubscription_SubscriptionDelete)
pSampleSubscription->State = State_SampleSubscription_SubscriptionDeleteDone;
else
pSampleSubscription->State = State_SampleSubscription_Error;
}
else
{
printf("SampleSubscription_Deleted_CB failed (0x%08x)\n", a_status);
pSampleSubscription->State = State_SampleSubscription_Error;
}
}
{
OpcUa_ReferenceParameter(a_pSubscription);
printf("SampleSubscription_StatusChanged_CB (0x%08x)\n", a_status);
}
OpcUa_Int32 a_noOfMonitoredItems,
OpcUa_MonitoredItemNotification *a_pMonitoredItems,
OpcUa_Int32 a_noOfDiagnosticInfos,
{
SampleSubscription *pSampleSubscription = a_pSubscription->
pUserData;
OpcUa_Int32 i;
OpcUa_ReferenceParameter(a_noOfDiagnosticInfos);
OpcUa_ReferenceParameter(a_pDiagnosticInfos);
printf("SampleSubscription_DataChange_CB\n");
printf(" noOfMonitoredItems: %i\n", a_noOfMonitoredItems);
for (i = 0; i < a_noOfMonitoredItems; i++)
{
OpcUa_CharA szDateTime[64] = {0};
printf(" [%i]:\n", i);
printf(" StatusCode: 0x%08x\n", a_pMonitoredItems[i].Value.StatusCode);
if (OpcUa_IsGood(a_pMonitoredItems[i].Value.StatusCode))
{
OpcUa_DateTime_GetStringFromDateTime(a_pMonitoredItems[i].Value.SourceTimestamp, szDateTime, sizeof(szDateTime));
printf(" SourceTimestamp: %s\n", szDateTime);
OpcUa_DateTime_GetStringFromDateTime(a_pMonitoredItems[i].Value.ServerTimestamp, szDateTime, sizeof(szDateTime));
printf(" ServerTimestamp: %s\n", szDateTime);
OpcUa_DateTime_GetStringFromDateTime(a_pMonitoredItems[i].Value.Value.Value.DateTime, szDateTime, sizeof(szDateTime));
printf(" Value: %s\n", szDateTime);
pSampleSubscription->uDataCount++;
}
}
}
static OpcUa_Void SampleSubscription_MonitoredItems_Created_CB(
const UaClient_Subscription *a_pSubscription,
OpcUa_Int32 a_NoOfResults,
OpcUa_Int32 a_NoOfDiagnosticInfos,
OpcUa_Void *a_pUserData)
{
SampleSubscription *pSampleSubscription = a_pSubscription->
pUserData;
OpcUa_ReferenceParameter(a_pUserData);
OpcUa_ReferenceParameter(a_NoOfDiagnosticInfos);
OpcUa_ReferenceParameter(a_pDiagnosticInfos);
if (a_NoOfResults == 1 && OpcUa_IsGood(a_pResponseHeader->
ServiceResult) && OpcUa_IsGood(a_pResults[0].StatusCode))
{
printf("SampleSubscription_MonitoredItems_Created_CB succeeded (0x%08x)\n", a_pResults[0].StatusCode);
printf(" MonitoredItemId: %u\n", a_pResults[0].MonitoredItemId);
printf(" RevisedSamplingInterval: %f\n", a_pResults[0].RevisedSamplingInterval);
printf(" RevisedQueueSize: %u\n", a_pResults[0].RevisedQueueSize);
if (pSampleSubscription->State == State_SampleSubscription_MonitoredItemCreate)
pSampleSubscription->State = State_SampleSubscription_MonitoredItemCreateDone;
else
pSampleSubscription->State = State_SampleSubscription_Error;
}
else
{
printf(
"SampleSubscription_MonitoredItems_Created_CB failed (0x%08x)\n", a_pResponseHeader->
ServiceResult);
pSampleSubscription->State = State_SampleSubscription_Error;
}
}
static OpcUa_Void SampleSubscription_MonitoredItems_Deleted_CB(
const UaClient_Subscription *a_pSubscription,
OpcUa_Int32 a_NoOfResults,
OpcUa_Int32 a_NoOfDiagnosticInfos,
OpcUa_Void *a_pUserData)
{
SampleSubscription *pSampleSubscription = a_pSubscription->
pUserData;
OpcUa_ReferenceParameter(a_pUserData);
OpcUa_ReferenceParameter(a_NoOfDiagnosticInfos);
OpcUa_ReferenceParameter(a_pDiagnosticInfos);
if (a_NoOfResults == 1 && OpcUa_IsGood(a_pResponseHeader->
ServiceResult) && OpcUa_IsGood(a_pResults[0]))
{
printf("SampleSubscription_MonitoredItems_Deleted_CB succeeded (0x%08x)\n", a_pResults[0]);
if (pSampleSubscription->State == State_SampleSubscription_MonitoredItemDelete)
pSampleSubscription->State = State_SampleSubscription_MonitoredItemDeleteDone;
else
pSampleSubscription->State = State_SampleSubscription_Error;
}
else
{
printf(
"SampleSubscription_MonitoredItems_Deleted_CB failed (0x%08x)\n", a_pResponseHeader->
ServiceResult);
pSampleSubscription->State = State_SampleSubscription_Error;
}
}
{
SampleSubscription *pSampleSubscription = OpcUa_Null;
pSampleSubscription = OpcUa_Alloc(sizeof(*pSampleSubscription));
if (pSampleSubscription == OpcUa_Null)
{
return OpcUa_Null;
}
OpcUa_MemSet(&subscriptionCallback, 0, sizeof(subscriptionCallback));
subscriptionCallback.pfStatusChanged_CB = SampleSubscription_StatusChanged_CB;
subscriptionCallback.pfDataChange_CB = SampleSubscription_DataChange_CB;
if (OpcUa_IsBad(uStatus))
{
OpcUa_Free(pSampleSubscription);
return OpcUa_Null;
}
pSampleSubscription->pSubscription = pSubscription;
pSampleSubscription->uDataCount = 0;
pSampleSubscription->uMonitoredItemId = 0;
pSampleSubscription->State = State_SampleSubscription_Idle;
pSubscription->
pUserData = pSampleSubscription;
return pSampleSubscription;
}
OpcUa_Void SampleSubscription_Delete(SampleSubscription **ppSampleSubscription)
{
SampleSubscription *pSampleSubscription = *ppSampleSubscription;
if (pSampleSubscription == OpcUa_Null)
return;
OpcUa_Free(pSampleSubscription);
*ppSampleSubscription = OpcUa_Null;
}
OpcUa_StatusCode SampleSubscription_CreateSubscription(SampleSubscription *pSampleSubscription)
{
pSampleSubscription->State = State_SampleSubscription_SubscriptionCreate;
OpcUa_Null,
SampleSubscription_Created_CB,
OpcUa_Null);
}
OpcUa_StatusCode SampleSubscription_DeleteSubscription(SampleSubscription *pSampleSubscription)
{
pSampleSubscription->State = State_SampleSubscription_SubscriptionDelete;
OpcUa_Null,
SampleSubscription_Deleted_CB,
OpcUa_Null);
}
OpcUa_StatusCode SampleSubscription_CreateMonitoredItem(SampleSubscription *pSampleSubscription)
{
OpcUa_Int32 i;
OpcUa_Int32 numItemsToCreate = 1;
pSampleSubscription->State = State_SampleSubscription_MonitoredItemCreate;
for (i = 0; i < numItemsToCreate; i++)
{
OpcUa_MonitoredItemCreateRequest_Initialize(&createRequest[i]);
}
createRequest[0].
ItemToMonitor.
NodeId.Identifier.Numeric = OpcUaId_Server_ServerStatus_CurrentTime;
OpcUa_Null,
numItemsToCreate,
createRequest,
SampleSubscription_MonitoredItems_Created_CB,
OpcUa_Null);
}
OpcUa_StatusCode SampleSubscription_DeleteMonitoredItem(SampleSubscription *pSampleSubscription)
{
OpcUa_Int32 numItemsToDelete = 1;
OpcUa_UInt32 MonitoredItemIds[1];
pSampleSubscription->State = State_SampleSubscription_MonitoredItemDelete;
MonitoredItemIds[0] = pSampleSubscription->uMonitoredItemId;
OpcUa_Null,
numItemsToDelete,
MonitoredItemIds,
SampleSubscription_MonitoredItems_Deleted_CB,
OpcUa_Null);
}