Skip to content

Commit 289cdf5

Browse files
authored
Merge pull request #8 from libxengine/develop
V2.0版本合并
2 parents a8c73d9 + 2206ee4 commit 289cdf5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+1666
-757
lines changed

README.en.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ c c++ 存储服务 c c++ 文件存储服务
55
c c++ file storage service
66
This is an api gateway for uploading and downloading.
77
The service is for users who have business needs for upload and download services (such as developers who need to upload and download servers).
8+
This server is more inclined to store the API interface direction
89
best storage service for http,batter than nginx and more convenient to manage. On going maintenance
910

1011
## Software feature
@@ -32,7 +33,7 @@ feature list:
3233

3334
#### Requirements
3435
support system above windows 7sp1 and linux(ubuntu20.04,centos8)
35-
XEngine need V7.14 or above
36+
XEngine need V7.17 or above
3637
vcpkg need 2021.05.11 or above
3738

3839
#### Windows
@@ -65,7 +66,7 @@ sudo dnf install jsoncpp-devel
6566
you can install xengine env to your system by shell
6667
like this:sudo XEngine_RunEnv.sh -i 3
6768
##### complie
68-
execute command in XEngine_Source path
69+
execute command in XEngine_Source path
6970
make complie
7071
make FLAGS=InstallAll install
7172
make FLAGS=CleanAll clear
@@ -91,6 +92,7 @@ The realization of downloading second transmission is to first query the local f
9192
- XEngine_APPClient client code dir
9293

9394
## now task
95+
expand management interface
9496
P2P
9597

9698
## other problems

README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ c c++ 存储服务 c c++ 文件存储服务
55
c c++ file storage service
66
这是一个上传下载服务API网关,不是文件同步服务,也不是云存储.
77
这个服务的主要目的是为了给有上传下载服务业务需求的用户使用(比如需要开发上传下载服务的开发人员).
8+
此服务器更偏向于存储API接口方向.
89
目前最好的HTTP存储服务,比NGINX更优秀,更方便管理.持续维护中...
910

1011
## 软件特性
@@ -31,7 +32,7 @@ c c++ file storage service
3132

3233
#### 版本需求
3334
支持WINDOWS 7SP1和LINUX(UBUNT20.04,CENTOS8)以上系统
34-
XEngine版本需要V7.14或者以上版本
35+
XEngine版本需要V7.17或者以上版本
3536
vcpkg 需要2021.05.11以上版本
3637

3738
#### Windows
@@ -62,7 +63,7 @@ sudo dnf install jsoncpp-devel
6263
##### XEngine环境
6364
XEngine可以通过脚本文件安装sudo XEngine_RunEnv.sh -i 3
6465
##### 编译命令
65-
在XEngine_Source目录下执行命令
66+
在XEngine_Source目录下执行命令
6667
make 编译
6768
make FLAGS=InstallAll 安装库程序
6869
make FLAGS=CleanAll 清理编译
@@ -89,7 +90,8 @@ make FLAGS=CleanAll 清理编译
8990
下载秒传的实现是先通过HASH查询本地文件保存路径,如果存在就直接下载完成.
9091

9192
## 当前任务
92-
实现P2P
93+
扩展管理接口
94+
实现P2P
9395

9496
## 其他问题
9597
你可以参考docment目录下的文档.里面包含了API协议和服务说明.
Lines changed: 221 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,221 @@
1+
#ifdef _WINDOWS
2+
#include <windows.h>
3+
#include <tchar.h>
4+
#else
5+
#endif
6+
#include <json/json.h>
7+
#include <XEngine_Include/XEngine_CommHdr.h>
8+
#include <XEngine_Include/XEngine_ProtocolHdr.h>
9+
#include <XEngine_Include/XEngine_BaseLib/BaseLib_Define.h>
10+
#include <XEngine_Include/XEngine_BaseLib/BaseLib_Error.h>
11+
#include <XEngine_Include/XEngine_Client/XClient_Define.h>
12+
#include <XEngine_Include/XEngine_Client/XClient_Error.h>
13+
#include <XEngine_Include/XEngine_Core/NetXApi_Define.h>
14+
#include <XEngine_Include/XEngine_Core/NetXApi_Error.h>
15+
#include <XEngine_Include/XEngine_NetHelp/APIHelp_Define.h>
16+
#include <XEngine_Include/XEngine_NetHelp/APIHelp_Error.h>
17+
#include "../../XEngine_Source/XStorage_Protocol.h"
18+
19+
#pragma comment(lib,"x86/XEngine_BaseLib/XEngine_BaseLib")
20+
#pragma comment(lib,"x86/XEngine_Client/XClient_Socket")
21+
#pragma comment(lib,"x86/XEngine_Core/XEngine_NetXApi")
22+
#pragma comment(lib,"x86/XEngine_NetHelp/NetHelp_APIHelp")
23+
#pragma comment(lib,"Ws2_32")
24+
25+
LPCTSTR lpszUserName = _T("123123aa");
26+
LPCTSTR lpszAddr = _T("192.168.1.7");
27+
28+
TCHAR tszPublicAddr[128];
29+
TCHAR tszPrivateAddr[128];
30+
31+
int nPort = 5103;
32+
SOCKET m_hSocket;
33+
34+
int APPClient_P2XPLogin()
35+
{
36+
DWORD dwNetType = 0;
37+
Json::Value st_JsonRoot;
38+
TCHAR tszMsgBuffer[2048];
39+
XENGINE_PROTOCOLHDR st_ProtocolHdr;
40+
41+
memset(tszPublicAddr, '\0', sizeof(tszPublicAddr));
42+
memset(tszPrivateAddr, '\0', sizeof(tszPrivateAddr));
43+
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
44+
memset(&st_ProtocolHdr, '\0', sizeof(XENGINE_PROTOCOLHDR));
45+
46+
st_ProtocolHdr.wHeader = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER;
47+
st_ProtocolHdr.unOperatorType = ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_P2XP;
48+
st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REQLOGIN;
49+
st_ProtocolHdr.byVersion = 2;
50+
st_ProtocolHdr.wTail = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL;
51+
52+
//获取网络连接类型
53+
if (!NetXApi_Socket_GetNetConnectType(&dwNetType))
54+
{
55+
return -1;
56+
}
57+
int nListCount = 0;
58+
APIHELP_NETCARD** ppSt_APICard;
59+
if (!APIHelp_NetWork_GetIPAddr(&ppSt_APICard, &nListCount, TRUE, tszPublicAddr))
60+
{
61+
return -1;
62+
}
63+
if (nListCount <= 0)
64+
{
65+
return -1;
66+
}
67+
_tcscpy(tszPrivateAddr, ppSt_APICard[0]->tszIPAddr);
68+
BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_APICard, nListCount);
69+
70+
st_JsonRoot["tszUserName"] = lpszUserName;
71+
st_JsonRoot["tszPrivateAddr"] = tszPrivateAddr;
72+
st_JsonRoot["tszPublicAddr"] = tszPublicAddr;
73+
st_JsonRoot["dwConnectType"] = (Json::Value::UInt)dwNetType;
74+
st_JsonRoot["dwPeerType"] = 0;
75+
st_ProtocolHdr.unPacketSize = st_JsonRoot.toStyledString().length();
76+
77+
int nMsgLen = sizeof(XENGINE_PROTOCOLHDR) + st_ProtocolHdr.unPacketSize;
78+
memcpy(tszMsgBuffer, &st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR));
79+
memcpy(tszMsgBuffer + sizeof(XENGINE_PROTOCOLHDR), st_JsonRoot.toStyledString().c_str(), st_ProtocolHdr.unPacketSize);
80+
81+
if (!XClient_TCPSelect_SendMsg(m_hSocket, tszMsgBuffer, nMsgLen))
82+
{
83+
return -1;
84+
}
85+
86+
nMsgLen = sizeof(tszMsgBuffer);
87+
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
88+
XClient_TCPSelect_RecvMsg(m_hSocket, tszMsgBuffer, &nMsgLen, FALSE);
89+
90+
printf("APPClient_P2XPLogin:%s\n", tszMsgBuffer + sizeof(XENGINE_PROTOCOLHDR));
91+
return 0;
92+
}
93+
94+
int APPClient_P2XPList()
95+
{
96+
Json::Value st_JsonRoot;
97+
TCHAR tszMsgBuffer[2048];
98+
XENGINE_PROTOCOLHDR st_ProtocolHdr;
99+
100+
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
101+
memset(&st_ProtocolHdr, '\0', sizeof(XENGINE_PROTOCOLHDR));
102+
103+
st_ProtocolHdr.wHeader = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER;
104+
st_ProtocolHdr.unOperatorType = ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_P2XP;
105+
st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_P2XP_REQLANLIST;
106+
st_ProtocolHdr.byVersion = 2;
107+
st_ProtocolHdr.wTail = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL;
108+
109+
st_JsonRoot["tszPublicAddr"] = tszPublicAddr;
110+
st_JsonRoot["tszPrivateAddr"] = tszPrivateAddr;
111+
112+
st_ProtocolHdr.unPacketSize = st_JsonRoot.toStyledString().length();
113+
114+
int nMsgLen = sizeof(XENGINE_PROTOCOLHDR) + st_ProtocolHdr.unPacketSize;
115+
memcpy(tszMsgBuffer, &st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR));
116+
memcpy(tszMsgBuffer + sizeof(XENGINE_PROTOCOLHDR), st_JsonRoot.toStyledString().c_str(), st_ProtocolHdr.unPacketSize);
117+
118+
if (!XClient_TCPSelect_SendMsg(m_hSocket, tszMsgBuffer, nMsgLen))
119+
{
120+
return -1;
121+
}
122+
123+
nMsgLen = sizeof(tszMsgBuffer);
124+
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
125+
XClient_TCPSelect_RecvMsg(m_hSocket, tszMsgBuffer, &nMsgLen, FALSE);
126+
127+
printf("APPClient_P2XPList:%s\n", tszMsgBuffer + sizeof(XENGINE_PROTOCOLHDR));
128+
return 0;
129+
}
130+
131+
int APPClient_P2XPGetUser()
132+
{
133+
Json::Value st_JsonRoot;
134+
TCHAR tszMsgBuffer[2048];
135+
XENGINE_PROTOCOLHDR st_ProtocolHdr;
136+
137+
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
138+
memset(&st_ProtocolHdr, '\0', sizeof(XENGINE_PROTOCOLHDR));
139+
140+
st_ProtocolHdr.wHeader = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER;
141+
st_ProtocolHdr.unOperatorType = ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_P2XP;
142+
st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_P2XP_REQUSERQUERY;
143+
st_ProtocolHdr.byVersion = 2;
144+
st_ProtocolHdr.wTail = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL;
145+
146+
st_JsonRoot["tszUserName"] = lpszUserName;
147+
148+
st_ProtocolHdr.unPacketSize = st_JsonRoot.toStyledString().length();
149+
150+
int nMsgLen = sizeof(XENGINE_PROTOCOLHDR) + st_ProtocolHdr.unPacketSize;
151+
memcpy(tszMsgBuffer, &st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR));
152+
memcpy(tszMsgBuffer + sizeof(XENGINE_PROTOCOLHDR), st_JsonRoot.toStyledString().c_str(), st_ProtocolHdr.unPacketSize);
153+
154+
if (!XClient_TCPSelect_SendMsg(m_hSocket, tszMsgBuffer, nMsgLen))
155+
{
156+
return -1;
157+
}
158+
159+
nMsgLen = sizeof(tszMsgBuffer);
160+
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
161+
XClient_TCPSelect_RecvMsg(m_hSocket, tszMsgBuffer, &nMsgLen, FALSE);
162+
163+
printf("APPClient_P2XPGetUser:%s\n", tszMsgBuffer + sizeof(XENGINE_PROTOCOLHDR));
164+
return 0;
165+
}
166+
167+
int APPClient_P2XPConnect()
168+
{
169+
Json::Value st_JsonRoot;
170+
TCHAR tszMsgBuffer[2048];
171+
XENGINE_PROTOCOLHDR st_ProtocolHdr;
172+
173+
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
174+
memset(&st_ProtocolHdr, '\0', sizeof(XENGINE_PROTOCOLHDR));
175+
176+
st_ProtocolHdr.wHeader = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_HEADER;
177+
st_ProtocolHdr.unOperatorType = ENUM_XENGINE_COMMUNICATION_PROTOCOL_TYPE_P2XP;
178+
st_ProtocolHdr.unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_P2XP_REQCONNECT;
179+
st_ProtocolHdr.byVersion = 2;
180+
st_ProtocolHdr.wTail = XENGIEN_COMMUNICATION_PACKET_PROTOCOL_TAIL;
181+
182+
st_JsonRoot["tszPublicAddr"] = tszPublicAddr;
183+
st_JsonRoot["tszPrivateAddr"] = tszPrivateAddr;
184+
185+
st_ProtocolHdr.unPacketSize = st_JsonRoot.toStyledString().length();
186+
187+
int nMsgLen = sizeof(XENGINE_PROTOCOLHDR) + st_ProtocolHdr.unPacketSize;
188+
memcpy(tszMsgBuffer, &st_ProtocolHdr, sizeof(XENGINE_PROTOCOLHDR));
189+
memcpy(tszMsgBuffer + sizeof(XENGINE_PROTOCOLHDR), st_JsonRoot.toStyledString().c_str(), st_ProtocolHdr.unPacketSize);
190+
191+
if (!XClient_TCPSelect_SendMsg(m_hSocket, tszMsgBuffer, nMsgLen))
192+
{
193+
return -1;
194+
}
195+
196+
nMsgLen = sizeof(tszMsgBuffer);
197+
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
198+
XClient_TCPSelect_RecvMsg(m_hSocket, tszMsgBuffer, &nMsgLen, FALSE);
199+
200+
printf("%s\n", tszMsgBuffer + sizeof(XENGINE_PROTOCOLHDR));
201+
return 0;
202+
}
203+
204+
int main()
205+
{
206+
WSADATA st_WSAData;
207+
WSAStartup(MAKEWORD(2, 2), &st_WSAData);
208+
209+
if (!XClient_TCPSelect_Create(&m_hSocket, lpszAddr, nPort))
210+
{
211+
return -1;
212+
}
213+
APPClient_P2XPLogin();
214+
APPClient_P2XPList();
215+
APPClient_P2XPGetUser();
216+
APPClient_P2XPConnect();
217+
218+
XClient_TCPSelect_Close(m_hSocket);
219+
WSACleanup();
220+
return 0;
221+
}

0 commit comments

Comments
 (0)