OSDN Git Service

フォーカス処理修正
[nlite/nlite.git] / nlib / nlib_common.cpp
1 #include "StdAfx.h"
2 #include "nlib_include.h"
3
4
5
6 HINTERNET hHttpSession;                 //HINTERNET
7 HINTERNET hWatchLiveNicoConnect;
8 HINTERNET hNicoVideoConnect;
9
10 TCHAR appDataPath[_MAX_PATH];
11 TCHAR localAppDataPath[_MAX_PATH];
12 XML_Parser xmlParser;
13 static CRITICAL_SECTION playerStatusParserCs;
14
15
16 ///
17 ///\83v\83\8c\83C\83\84\81[\83X\83e\81[\83^\83X\83p\81[\83T\8f\89\8aú\89»
18 ///
19 static INLINE VOID Parser_Initialize();
20
21
22 ///
23 ///\83v\83\8c\83C\83\84\81[\83X\83e\81[\83^\83X\83p\81[\83T\8cã\8f\88\97\9d
24 ///
25 static INLINE VOID Parser_Finalize();
26
27 NLIB_RESULT InitializeNLIB(HINTERNET hInternet){
28
29         NLIB_RESULT rslt = NLIB_ERR_CODE_NOTSET;
30         hHttpSession = hInternet;
31         if(hHttpSession == NULL){
32
33                 rslt = NLIB_INITALIZE_FAILED_NETWORK;
34                 goto end;
35
36         }
37
38         hWatchLiveNicoConnect = WinHttpConnect(hHttpSession,WTEXT(WATCH_LIVE_NICO_VIDEO_DOMEINNAME),INTERNET_DEFAULT_HTTP_PORT,0);
39
40         if(hHttpSession == NULL){
41                 rslt = NLIB_INITALIZE_FAILED_NETWORK;
42                 goto end;
43         }
44
45         hNicoVideoConnect = WinHttpConnect(hHttpSession,WWW_NICO_VIDEO_DOMEINNAME,INTERNET_DEFAULT_HTTP_PORT,0);
46
47         //appData\82Ì\83p\83X\82ð\83Z\83b\83g
48         SHGetFolderPathW(0,CSIDL_APPDATA,0,SHGFP_TYPE_CURRENT,appDataPath);
49         wcscat(appDataPath,L"\\");
50
51         //localAppData\82Ì\83p\83X\82ð\83Z\83b\83g
52         SHGetFolderPathW(0,CSIDL_LOCAL_APPDATA,0,SHGFP_TYPE_CURRENT,localAppDataPath);
53         wcscat(localAppDataPath,L"\\");
54
55
56
57
58         //\83N\83b\83L\81[\83\89\83C\83u\83\89\83\8a\82ð\8f\89\8aú\89»
59         InitializeShareCookie(appDataPath,localAppDataPath);
60
61         Initialize_NicoLive();
62
63         //\83p\81[\83T\82ð\8f\89\8aú\89»
64         Parser_Initialize();
65
66         rslt = NLIB_ERR_OK;
67
68 end:
69
70
71         return rslt;
72 }
73
74 VOID FinalizeNLIB(){
75         //\83v\83\8c\83C\83\84\81[\83X\83e\81[\83^\83X\83p\81[\83T\8cã\8f\88\97\9d
76         Parser_Finalize();
77
78         Finalize_NicoLive();
79
80
81         //\83N\83b\83L\81[\8b¤\97L\83\89\83C\83u\83\89\83\8a\82Ì\8cã\8f\88\97\9d
82         FinalizeShareCookie();
83
84
85
86         //winHttp\82Ì\8cã\8f\88\97\9d
87         //WinHttpCloseHandle(hHttpSession);
88
89         //winsock\82Ì\8cã\8f\88\97\9d
90         //WSACleanup();
91
92         return;
93 }
94
95
96 INLINE BOOL ReadHttpBody(HINTERNET hRequest,LPBYTE lpBuffer,DWORD dwBufSize,LPDWORD lpDwSize){
97
98
99         DWORD  dwSize;
100         DWORD  dwTotalSize = 0;
101         DWORD  dwTotalSizePrev = 0;
102
103         for (;;) {
104                 WinHttpQueryDataAvailable(hRequest, &dwSize);
105                 if (dwSize > 0) {
106                         dwTotalSizePrev = dwTotalSize;
107                         dwTotalSize += dwSize;
108
109                         if(dwTotalSize >= dwBufSize){
110                                 return FALSE;
111                         }
112
113                         WinHttpReadData(hRequest, lpBuffer + dwTotalSizePrev, dwSize, (LPDWORD)NULL);
114
115                 }
116                 else
117                         break;
118         }
119
120         *lpDwSize= dwTotalSize;
121
122         return TRUE;
123
124 }
125 static INLINE VOID Parser_Initialize(){
126
127
128         xmlParser = XML_ParserCreate((const XML_Char*)NULL);
129
130         check(xmlParser,TEXT("\83p\81[\83T\8f\89\8aú\89»\82É\8e¸\94s\82µ\82Ü\82µ\82½"));
131
132
133
134         InitializeCriticalSection(&playerStatusParserCs);
135
136 }
137
138 static INLINE VOID Parser_Finalize(){
139
140
141         XML_ParserFree(xmlParser);
142
143         DeleteCriticalSection(&playerStatusParserCs);
144
145
146 }
147
148  VOID XMLParse(LPVOID option,LPCSTR body,XML_StartElementHandler startElementEvent,XML_EndElementHandler endElementEvent,XML_CharacterDataHandler characterDataEvent){
149
150         UserDataContainer userDataContainer;
151         userDataContainer.nord = 0;
152         userDataContainer.userData = option;
153
154
155         EnterCriticalSection(&playerStatusParserCs);
156
157         //\91®\90«\90Ý\92è
158         XML_SetElementHandler(xmlParser,startElementEvent,endElementEvent);
159         XML_SetCharacterDataHandler(xmlParser,characterDataEvent);
160         XML_SetUserData(xmlParser,&userDataContainer);
161
162         //\89ð\90Í
163         XML_Parse(xmlParser,body,strlen(body),TRUE);
164
165         //\83\8a\83Z\83b\83g
166         XML_ParserReset(xmlParser,(const XML_Char*)NULL);
167
168         LeaveCriticalSection(&playerStatusParserCs);
169
170
171 }