| | |
| | | |
| | | #define ACTION_LIDENTIFIER "<**" |
| | | #define ACTION_RIDENTIFIER "**>" |
| | | #define TOPIC_LIDENTIFIER '{' |
| | | #define TOPIC_RIDENTIFIER '}' |
| | | #define TOPIC_LIDENTIFIER "{" |
| | | #define TOPIC_RIDENTIFIER "}" |
| | | |
| | | int parse_pubsub_topic(char *str, char **_action, size_t *_action_len, char **_topic, size_t *_topic_len) { |
| | | int parse_pubsub_topic(char *str, char **_action, char **_topic, size_t *head_len ) { |
| | | char *ptr = str; |
| | | char *str_end_ptr = str + strlen(str); |
| | | char *action_start_ptr; |
| | |
| | | ptr += strlen(ACTION_RIDENTIFIER); |
| | | // printf("%s\n", ptr); |
| | | // printf("%s\n", str_end_ptr-1); |
| | | if( (*ptr == TOPIC_LIDENTIFIER) && (*(str_end_ptr-1) == TOPIC_RIDENTIFIER) ) { |
| | | topic_start_ptr = ptr; |
| | | topic_end_ptr = str_end_ptr; |
| | | topic_len = topic_end_ptr - topic_start_ptr + 1; |
| | | ptr++; |
| | | // while(*(++ptr) != '}') { |
| | | // length++; |
| | | // } |
| | | if(strncmp(ptr, TOPIC_LIDENTIFIER, strlen(TOPIC_LIDENTIFIER)) == 0 ) { |
| | | topic_start_ptr = ptr+strlen(TOPIC_LIDENTIFIER); |
| | | |
| | | |
| | | while(strncmp(++ptr, TOPIC_RIDENTIFIER, strlen(TOPIC_RIDENTIFIER)) != 0) { |
| | | if(ptr >= str_end_ptr) { |
| | | return 0; |
| | | } |
| | | } |
| | | topic_end_ptr = ptr; |
| | | topic_len = topic_end_ptr - topic_start_ptr; |
| | | |
| | | ptr += strlen(TOPIC_RIDENTIFIER); |
| | | |
| | | } else { |
| | | return 0; |
| | | } |
| | |
| | | char *topic = (char *)calloc(1, topic_len+1); |
| | | strncpy(topic, topic_start_ptr, topic_len); |
| | | *_topic = topic; |
| | | *_topic_len = topic_len; |
| | | |
| | | char *action = (char *)calloc(1, action_len+1); |
| | | strncpy(action, action_start_ptr, action_len); |
| | | *_action = action; |
| | | *_action_len = action_len; |
| | | |
| | | *head_len = ptr-str; |
| | | |
| | | return 1; |
| | | } |
| | |
| | | char *action; |
| | | size_t action_len; |
| | | char *topic; |
| | | size_t topic_len; |
| | | size_t head_len; |
| | | |
| | | char *str = "<**sub**>{经济}"; |
| | | if(parse_pubsub_topic(str, &action, &action_len, &topic, &topic_len)) { |
| | | char *str = "<**pub**>{经济}abcdef"; |
| | | if(parse_pubsub_topic(str, &action, &topic, &head_len)) { |
| | | printf("action:%s\n", action); |
| | | printf("topic:%s\n", topic); |
| | | printf("content:%s\n", str+head_len); |
| | | free(action); |
| | | free(topic); |
| | | } else { |