#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¾
///
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);
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