VR-Forces 4.0.4 Class Documentation
include/vrvControl/DtVrlinkDataInterMarshaller.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002 ** Copyright (c) 2010 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 *******************************************************************************/
00005 
00009 
00010 #pragma once
00011 
00012 #include <vrvControl/vrvControlToolkitDataTypes.h>
00013 
00014 #include <vlutil/vlPrint.h>
00015 #include <vl/datumRecSet.h>
00016 
00017 namespace vrvControlToolkit
00018 {
00019 
00023 template<class DataMsg>
00024 class DtVrlinkDataInterMarshaller
00025 {
00026 public: 
00027    DtVrlinkDataInterMarshaller();
00028    virtual ~DtVrlinkDataInterMarshaller();
00029 
00031    virtual void encode(DtVrvControl_v1* cmd, DataMsg* msg);
00032    
00038    virtual DtVrvControl_v1* decode(const DataMsg* msg);
00039 
00040 protected:
00041 
00042 };
00043 
00044 
00045 
00046 template<class DataMsg>
00047 DtVrlinkDataInterMarshaller<DataMsg>::DtVrlinkDataInterMarshaller()
00048 {
00049 
00050 }
00051 
00052 template<class DataMsg>
00053 DtVrlinkDataInterMarshaller<DataMsg>::~DtVrlinkDataInterMarshaller()
00054 {
00055 
00056 }
00057 
00058 template<class DataMsg>
00059 void DtVrlinkDataInterMarshaller<DataMsg>::encode(DtVrvControl_v1* cmd, DataMsg* msg)
00060 {
00061    DtDatumRetCode ret;
00062 
00063    //setup the var field
00064    msg->setNumVarFields(1);
00065 
00066    //odd that these start their indexes at 1
00067    msg->setDatumParam(DtVar, 1, (DtDatumParam)DtVrvControlDatumParamId);
00068    msg->setVarDataBytes(1, cmd->mySize, &ret);
00069    msg->setDatumValByteArray(DtVar, 1, (char*)cmd, &ret);
00070 }
00071 
00072 template<class DataMsg>
00073 DtVrvControl_v1* DtVrlinkDataInterMarshaller<DataMsg>::decode(const DataMsg* msg)
00074 {
00075    DtDatumRetCode ret;
00076    DtDatumRecordType type;
00077    int index;
00078    int size;
00079 
00080    msg->getIndex((DtDatumParam)DtVrvControlDatumParamId, &type, &index, &ret);
00081    if(ret!=DtDatumValid)
00082    {
00083       return NULL;
00084    }
00085    
00086    //actually get the data out of the pdu/interaction
00087    size=msg->datumSizeBytes(type, index);
00088    const char* buffer=msg->datumValByteArray(type, index);
00089 
00090    //create some memory
00091    char* cmdBuffer=new char[size];
00092 
00093    //copy message to buffer;
00094    memcpy(cmdBuffer, buffer, size);
00095 
00096    //cast a control structure
00097    DtVrvControl_v1* cmd=(DtVrvControl_v1*)cmdBuffer;
00098 
00099    //check magic number for endiness
00100    if(cmd->myMagicNumber!=DtVrvMagicNumber)
00101    {
00102       delete [] cmdBuffer;
00103       return NULL;
00104    }
00105 
00106    return cmd;
00107 }
00108 
00109 } //vrvControlToolkit::

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)