/************************TRICK HEADER*************************
PURPOSE:
    ( This S_define is to be used with RUN_trickcomm input file )
*************************************************************/

#include "sim_objects/default_trick_sys.sm"

##include "test_struct.h"

// Put an extern line for attrTEST_DATA_STRUCT in S_source.hh
// Don't let SWIG process the line
%header{
##ifndef SWIG
extern ATTRIBUTES attrTEST_DATA_STRUCT[] ;
##endif
%}

class CannonSimObject : public Trick::SimObject {

    public:
        TCDevice connection ;
        TEST_DATA_STRUCT tds ;
        TEST_DATA_STRUCT read_tds ;

        /* Initialize client's connection to server */
        void init_comm() {
            connection.port = 9000 ;
            connection.hostname = strdup("localhost") ;
            connection.disable_handshaking = TC_COMM_TRUE ;
            tc_connect( &connection ) ;
        }

        void send_test() {
            usleep(100) ;
            fprintf(stderr, "before write int1 =%x  int2 =%x\n", tds.int1 , tds.int2 ) ;
            fprintf(stderr, "before write long1=%lx  long2=%lx\n", tds.long1 , tds.long2 ) ;
            tc_write_byteswap( &connection, (char *)&tds, sizeof(TEST_DATA_STRUCT), attrTEST_DATA_STRUCT) ;
            tc_read_byteswap( &connection, (char *)&read_tds, sizeof(TEST_DATA_STRUCT), attrTEST_DATA_STRUCT) ;
            fprintf(stderr, "after read int1 =%x  int2 =%x\n", read_tds.int1 , read_tds.int2 ) ;
            fprintf(stderr, "after read long1=%lx  long2=%lx\n", read_tds.long1 , read_tds.long2 ) ;
        }

        CannonSimObject() : connection() , tds() {
            tds.int1 = 1234 ;
            tds.int2 = 5678 ;
            tds.long1 = 8888 ;
            tds.long2 = 9999 ;
            ("initialization") init_comm() ;
            (1.0, "scheduled") send_test() ;
        }

} ;

// Instantiations
CannonSimObject dyn ;