Beispiel #1
0
/**
 * Initialize the application
 * @param argc	argument count
 * @param argv	argument values
 * @return SUCCEED/FAIL
 */
int init(int argc, char** argv)
{
	int ret = SUCCEED;

	TP_LOG(log_info, "Initialising...");

	if (SUCCEED!=tpinit(NULL))
	{
		TP_LOG(log_error, "Failed to Initialise: %s", 
			tpstrerror(tperrno));
		ret = FAIL;
		goto out;
	}
	

	
	/* Advertise our service */
	if (SUCCEED!=tpadvertise(msg_service(), USERREGSV))
	{
		TP_LOG(log_error, "Failed to initialise USERREGSV_UBF!");
		ret=FAIL;
		goto out;
	}	

out:

	
	return ret;
}
Beispiel #2
0
/**
 * Service entry
 * @return SUCCEED/FAIL
 */
void USERREGSV (TPSVCINFO *p_svc)
{
    int ret = SUCCEED;
    int rsp = 0;
    Message_t msg;
    long len;
    char * buf = p_svc->data;

    memset(&msg, 0, sizeof(msg));
    
    /* allocate some stuff for more data to put in  */
    
    len = tptypes(p_svc->data, NULL, NULL) + 1024;
    
    if (NULL==(buf = tprealloc(buf, len)))
    {
	TP_LOG(log_error, "Failed reallocate buffer to size %d: %s", 
                len, tpstrerror(tperrno));
	ret=FAIL;
	goto out;
    }

    if (SUCCEED != parse_msg(&msg, buf, len))
    {
	TP_LOG(log_error, "Failed to parse msg");
	ret=FAIL;
	goto out;
	    
    }
    
    msg.rsp.rspstatus = 100;
    strcpy(msg.rsp.rsprspmsg, "User successfully registered");
    
    if(SUCCEED != msg_build(&msg, &buf, &len))
    {
	TP_LOG(log_error, "Failed to build msg");
	ret=FAIL;
	goto out;
    }

out:

    tpreturn(  ret==SUCCEED?TPSUCCESS:TPFAIL,
            0L,
            buf,
            0L,
            0L);


}
Beispiel #3
0
void CBattleFieldLayer::update(float dt)
{
    TP_LOG_BEGIN(0);
    TP_LOG("begin", 0);
    
    GAME_TIME->update(dt);
    
    BF_MANAGER->update(dt);
    
    EFFECT_MANAGER->update(dt);

    
    TP_LOG("1", 0);
    
    Array* children = getChildren();
    Object* obj;
    CCARRAY_FOREACH(children, obj)
    {
        obj->update(dt);
    }
Beispiel #4
0
/**
 * Build outgoing message
 * @param[in] msg full message to send
 * @param[out] outbuf output buffer/XATMI allocated
 * @param[out] olen output buffer len
 * @return SUCCEED/FAIL
 */
int msg_build(Message_t *msg, char **outbuf, long *olen)
{
    int ret = SUCCEED;
    msgbuilder_t *p = M_msgflds;
    short *p_short;
    long *p_long;
    void *fld_ptr;
    char *p_string_el;
    char tmpbuf[64];
    char tmpbuf2[64];
    xmlDocPtr   newDoc;
    xmlNodePtr  rootNode;
    short *p_items;
    int i;
    xmlChar *xmlDocInMemory = NULL;
    int		size = 0;
    
    /* Alloc STRING into obuf */
    if (NULL==*outbuf)
    {
        *outbuf = tpalloc("STRING", NULL, MAX_BUFSZ);
    }
    
    if (NULL==*outbuf)
    {
       TP_LOG(log_error, "Failed to alloc %d bytes: %s", 
			MAX_BUFSZ, tpstrerror(tperrno)); 
       ret=FAIL;
       goto out;
    }
    
    /* start libxml2 XML doc */
    
    newDoc = xmlNewDoc( BAD_CAST XML_VERSION );
    rootNode = xmlNewNode(NULL, BAD_CAST "user");
    xmlDocSetRootElement(newDoc, rootNode);
            
    while (0!=p->tag[0])
    {
        fld_ptr = (char *)msg + p->msgoffs + p->elmoffs;
                
        switch (p->elmtyp)
        {
            case MSG_SHORT:
                p_short =  (short *)fld_ptr;
                snprintf(tmpbuf, sizeof(tmpbuf), "%hd", *p_short);
                xmlNewTextChild( rootNode, NULL, BAD_CAST p->tag, BAD_CAST tmpbuf );
                break;
            case MSG_LONG:
                p_long =  (long *)fld_ptr;
                snprintf(tmpbuf, sizeof(tmpbuf), "%ld", *p_long);
                xmlNewTextChild( rootNode, NULL, BAD_CAST p->tag, BAD_CAST tmpbuf );
                break;
            case MSG_STRING:
                xmlNewTextChild( rootNode, NULL, BAD_CAST p->tag, 
                        BAD_CAST ((char *)fld_ptr) );
                break;
            case MSG_ARRAY_SHORT:
                
                p_items = (short *)((char *)msg + p->msgoffs + p->itmoffs);
                
                for (i=0; i<*p_items; i++)
                {
                    p_short = (short *)( (char *)fld_ptr + i*sizeof(short));
                    snprintf(tmpbuf, sizeof(tmpbuf), "%hd", *p_short);
                    
                    snprintf(tmpbuf2, sizeof(tmpbuf), "%s_%d", p->tag, i);
                    xmlNewTextChild( rootNode, NULL, BAD_CAST tmpbuf2, 
                            BAD_CAST tmpbuf );
                }
                
                break;
            case MSG_ARRAY_STRING:
                
                p_items = (short *)((char *)msg + p->msgoffs + p->itmoffs);
                
                for (i=0; i<*p_items; i++)
                {
                    /* calculate string array element location */
                    p_string_el = (char *)fld_ptr + i*MAX_STR;
                    
                    snprintf(tmpbuf2, sizeof(tmpbuf), "%s_%d", p->tag, i);
                    xmlNewTextChild( rootNode, NULL, BAD_CAST tmpbuf2, 
                            BAD_CAST p_string_el );
                }
                
                break;
            default:
                TP_LOG(log_error, "Unknown element type %d tag: [%s]!", 
                        p->elmtyp, p->tag);
                ret=FAIL;
                goto out;
                break;
        }
        
        p++;
    }
    
    /* build xmldoc, copy to outbuf, specify size */
    xmlDocDumpMemory( newDoc, &xmlDocInMemory, &size );
    strncpy(*outbuf, xmlDocInMemory, size);
    (*outbuf)[size] = 0;
    *olen = size+1;
    xmlFree(xmlDocInMemory);
    
    TP_LOG(log_debug, "got XML [%s]", *outbuf);
    
out:
    if (NULL != newDoc)
    {
        xmlFreeDoc( newDoc );
    }
    return ret;
}
Beispiel #5
0
/**
 * Parse incoming message, send all data to msg
 * @param msg domain model msg
 * @param ibuf input buffer
 * @param ilen input buffer len
 * @return SUCCEED/FAIL
 */
int parse_msg(Message_t *msg, char *ibuf, long ilen)
{
    int ret = SUCCEED;
    msgbuilder_t *descr;
    char *buf;
    
    short *p_short;
    long *p_long;
    
    char *cp;
    
    void *fld_ptr;
    char *p_string_el;
    xmlDocPtr   doc;
    xmlNodePtr  rootNode;
    xmlNode *currentNode = NULL;
    short item;
    
    /* start libxml2 XML doc */
    
    doc = xmlReadMemory( ibuf, strlen(ibuf), NULL, NULL, 0 );
	
    if ( NULL == doc )
    {
        TP_LOG(log_error, "Failed to read XML document!");
        return FAIL;
    }

    rootNode = xmlDocGetRootElement( doc );
    
    currentNode = rootNode->children;
            
    /* loop over all tags */
    for (; currentNode;
                    currentNode = currentNode->next )
    {
        /* find tag descriptor */
        if (NULL==(descr = get_tag((char *)currentNode->name)))
        {
            TP_LOG(log_error, "Failed to get tag descr for [%s]", 
                    currentNode->name);
            ret = FAIL;
            goto out;
        }
        
        /* get the content of the tag */
        if (NULL==(buf = (char *)xmlNodeGetContent(currentNode)))
        {
            TP_LOG(log_error, "NULL tag: [%s]", currentNode->name);
            ret = FAIL;
            goto out;
        }
        
        TP_LOG(log_debug, "got tag [%s] value [%s]", currentNode->name, 
                buf?buf:"(null)");
        
        /* load the field into struct accordingly */
        fld_ptr = (char *)msg + descr->msgoffs + descr->elmoffs;
        
        switch (descr->elmtyp)
        {
            case MSG_SHORT:
                p_short =  (short *)fld_ptr;
                *p_short = atoi(buf);
                break;
            case MSG_LONG:
                p_long =  (long *)fld_ptr;
                *p_long = atol(buf);
                break;
            case MSG_STRING:
                strcpy((char *)fld_ptr, buf);
                break;
            case MSG_ARRAY_SHORT:
                
                /* get item number from tag */
                cp = strchr(currentNode->name, '_');
                cp++;
                
                item = atoi(cp);
                p_short = (short *)( (char *)fld_ptr + item*sizeof(short));
                *p_short = atoi(buf);
                
                break;
            case MSG_ARRAY_STRING:
                
                /* get item number from tag */
                cp = strchr(currentNode->name, '_');
                cp++;
                
                item = atoi(cp);
                p_string_el = ( (char *)fld_ptr + item*MAX_STR);
                strcpy(p_string_el, buf);
                
                break;
            default:
                TP_LOG(log_error, "Unknown element type %d!", descr->elmtyp);
                ret=FAIL;
                goto out;
                break;
        }
        
         xmlFree(buf);
         
    }
    
out:
    if(doc)
    {
        xmlFreeDoc(doc);
    }

    return ret;
}
Beispiel #6
0
/**
 * Terminate the application
 */
void uninit(void)
{
	TP_LOG(log_info, "Uninitialising...");
}