OSDN Git Service

2011/10/26 0:11:48
[nlite/nlite.git] / nlib / nlib_myList.c
index 2fd1408..477dd4e 100644 (file)
@@ -1,11 +1,39 @@
 #include "nlib_include.h"
 
 
+typedef enum {
+
+       NicoMyList_Root = 0,
+       NicoMyList_mylist,
+       NicoMyList_mylistitem,
+       NicoMyList_item,
+       NicoMyList_item_data,
+
+}NicoMyListHierarchy;
+
+typedef struct {
+       UINT64 nord;
+       NLIB_RESULT errcode;
+       NicoMyListItem_P pitem;
+
+
+}NicoMyListItemContainer,*NicoMyListItemContainer_P;
+
 ///
 ///\83}\83C\83\8a\83X\83g\88ê\97\97\8eæ\93¾\8b¤\92Ê\8f\88\97\9d
 ///
 static NLIB_RESULT NicoMyList_getList(NicoVideoAuth_P pAuth,LPCWSTR objectName,NicoMyListCallBack callback);
 
+static NicoMyListItem_P NicoMyListItem_new();
+
+static VOID NicoMyListItem_delete(NicoMyListItem_P *pitem);
+
+static JSONVoid myListItemStructEventHandler(JSONVoid *option,JSONUInt thisHierarchy,JSONUInt valueType,JSONChar_P name);
+
+static JSONVoid myListItemDataEventHandler(JSONVoid *option,JSONUInt thisHierarchy,JSONUInt valueType,JSONChar_P name,JSONParameter param);
+
+static JSONVoid myListItemDataEndEventHandler(JSONVoid *option,JSONUInt thisHierarchy,JSONUInt valueType,JSONChar_P param);
+
 ///
 ///\82Æ\82è\82 \82¦\82¸\83}\83C\83\8a\83X\83g\88ê\97\97\8eæ\93¾
 ///
@@ -41,8 +69,9 @@ static NLIB_RESULT NicoMyList_getList(NicoVideoAuth_P pAuth,LPCWSTR objectName,N
        DWORD readSize;
        LPSTR readBuffer = NULL;
        JSONParser_P jsonParser = NULL;
+       NicoMyListItemContainer itemContainer;
 
-
+       ZeroMemory(&itemContainer,sizeof(itemContainer));
 
        wcscat(sendBuffer,pAuth->userSession);
        hNicoVideoSession = WinHttpConnect(hHttpSession,WWW_NICO_VIDEO_DOMEINNAME,INTERNET_DEFAULT_HTTP_PORT,0);
@@ -52,47 +81,160 @@ static NLIB_RESULT NicoMyList_getList(NicoVideoAuth_P pAuth,LPCWSTR objectName,N
 
        if(WinHttpSendRequest(hGetMyList,sendBuffer,-1,WINHTTP_NO_REQUEST_DATA,0,0,0) == FALSE){
 
-               rslt = NLIB_ERR_FAILED_NETWORK;
-               goto end;
+               goto networkerr;
 
        }
-
+       
        readBuffer = (LPSTR)malloc(LENGTH_65536 * 30);
 
        jsonParser = JSONParser_new();
 
+       JSONParser_setEventHandler(jsonParser,myListItemStructEventHandler,myListItemDataEventHandler,myListItemDataEndEventHandler);
+
+       itemContainer.pitem = NicoMyListItem_new();
+
        if(WinHttpReceiveResponse(hGetMyList,NULL) == FALSE){
 
-               rslt = NLIB_ERR_FAILED_NETWORK;
-               goto end;
+               goto networkerr;
 
        }
 
 
        if (WinHttpQueryHeaders(hGetMyList,WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER,WINHTTP_HEADER_NAME_BY_INDEX,&statusCode,&statusCodeSize,WINHTTP_NO_HEADER_INDEX) == FALSE){
-               rslt = NLIB_GETPLAYERSTATUS_FAILED_CONNECT;
-               goto end;
+               goto networkerr;
        }
 
        if (HTTP_STATUS_OK != statusCode){
-               rslt = NLIB_GETPLAYERSTATUS_FAILED_CONNECT;
-               goto end;
+               goto networkerr;
        }
 
        if(ReadHttpBody(hGetMyList,(LPBYTE)readBuffer,CHUNKMEMORY_MAXSIZE,&readSize) == FALSE){
+               goto networkerr;
+
+       }
+
+       readBuffer[readSize] = '\0';
 
-               rslt = NLIB_GETPLAYERSTATUS_FAILED_CONNECT;
-               goto end;
+       if(JSONParser_Parse(jsonParser,readBuffer,JSON_ENCODE_UTF8,&itemContainer) != JSON_ERR_OK){
 
+               goto jsonerr;
        }
 
 
+
+
 end:
        free(readBuffer);
        JSONParser_delete(&jsonParser);
+       NicoMyListItem_delete(&itemContainer.pitem);
        WinHttpCloseHandle(hNicoVideoSession);
        WinHttpCloseHandle(hGetMyList);
 
        return rslt;
+
+networkerr:
+       rslt = NLIB_ERR_FAILED_NETWORK;
+       goto end;
+jsonerr:
+       rslt = NLIB_ERR_JSON_PARSE;
+       goto end;
+}
+
+static NicoMyListItem_P NicoMyListItem_new(){
+
+       NicoMyListItem_P self = (NicoMyListItem_P)calloc(1,sizeof(*self));
+
+       return self;
+}
+
+static VOID NicoMyListItem_delete(NicoMyListItem_P *pitem){
+
+       free(*pitem);
+       (*pitem) = NULL;
+
+       return;
 }
 
+
+static JSONVoid myListItemStructEventHandler(JSONVoid *option,JSONUInt thisHierarchy,JSONUInt valueType,JSONChar_P name){
+
+       NicoMyListHierarchy nord = NicoMyList_Root;
+
+       NicoMyListItemContainer_P self = (NicoMyListItemContainer_P)option;
+
+       switch(self->nord){
+
+       case MAKENORD(NicoMyList_Root):
+
+               if(thisHierarchy == JSONTypeRoot && valueType == JSONTypeObject){
+
+                       nord = NicoMyList_mylist;
+
+               }
+               break;
+
+       case MAKENORD1(NicoMyList_Root,NicoMyList_mylist):
+
+               if(thisHierarchy == JSONTypeObject && valueType == JSONTypeArray && wcscmp(name,L"mylistitem") == 0){
+
+                       nord = NicoMyList_mylistitem;
+
+               }
+
+               break;
+
+       case MAKENORD2(NicoMyList_Root,NicoMyList_mylist,NicoMyList_mylistitem):
+
+               if(thisHierarchy == JSONTypeArray && valueType == JSONTypeObject){
+
+                       nord = NicoMyList_item;
+
+               }
+
+               break;
+
+       case MAKENORD3(NicoMyList_Root,NicoMyList_mylist,NicoMyList_mylistitem,NicoMyList_item):
+
+               if(thisHierarchy == JSONTypeObject && valueType == JSONTypeObject && wcscmp(name,L"item_data") == 0){
+
+                       nord = NicoMyList_item_data;
+
+               }
+
+               break;
+
+       }
+
+       self->nord = MAKENORD1(self->nord,nord);
+       
+
+       return;
+}
+
+
+static JSONVoid myListItemDataEventHandler(JSONVoid *option,JSONUInt thisHierarchy,JSONUInt valueType,JSONChar_P name,JSONParameter param){
+
+       switch(valueType){
+
+
+       case JSONTypeDecimal:
+
+               dumpln(TEXT("name:[%s]:param[%s]"),name,(LPCWSTR)param);
+
+               break;
+
+       case JSONTypeString:
+
+               dumpln(TEXT("name:[%s]:param[%s]"),name,(LPCWSTR)param);
+               
+               break;
+       }
+       return;
+}
+
+static JSONVoid myListItemDataEndEventHandler(JSONVoid *option,JSONUInt thisHierarchy,JSONUInt valueType,JSONChar_P name){
+
+       UPNORD(((NicoMyListItemContainer_P)option)->nord);
+
+       return;
+}
\ No newline at end of file