Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
colorEagleStdio
zoompipeline
提交
94722e9d
zoompipeline
项目概览
colorEagleStdio
/
zoompipeline
通知
181
Star
12
Fork
4
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
zoompipeline
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
94722e9d
编写于
1月 25, 2014
作者:
丁劲犇
😸
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add major change , to acheive new standard docs.
上级
c3c9ff23
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
157 addition
and
80 deletion
+157
-80
QTcpClientTest/qtcpclienttest.cpp
QTcpClientTest/qtcpclienttest.cpp
+4
-15
ZoomPipeline_FuncSvr/smartlink/st_client_table.cpp
ZoomPipeline_FuncSvr/smartlink/st_client_table.cpp
+2
-1
ZoomPipeline_FuncSvr/smartlink/st_client_table.h
ZoomPipeline_FuncSvr/smartlink/st_client_table.h
+1
-0
ZoomPipeline_FuncSvr/smartlink/st_clientnode.cpp
ZoomPipeline_FuncSvr/smartlink/st_clientnode.cpp
+128
-63
ZoomPipeline_FuncSvr/smartlink/st_clientnode.h
ZoomPipeline_FuncSvr/smartlink/st_clientnode.h
+11
-0
ZoomPipeline_FuncSvr/smartlink/st_message.h
ZoomPipeline_FuncSvr/smartlink/st_message.h
+10
-0
ZoomPipeline_FuncSvr/zpmainframe.cpp
ZoomPipeline_FuncSvr/zpmainframe.cpp
+1
-1
未找到文件。
QTcpClientTest/qtcpclienttest.cpp
浏览文件 @
94722e9d
...
...
@@ -106,22 +106,11 @@ void QTcpClientTest::timerEvent(QTimerEvent * evt)
//send heart-beating
foreach
(
QGHTcpClient
*
pSock
,
listObj
)
{
quint16
nMsgLen
=
0
;
QByteArray
array
(
sizeof
(
SMARTLINK_MSG
)
+
nMsgLen
-
1
,
0
);
QByteArray
array
(
sizeof
(
SMARTLINK_HEARTBEATING
),
0
);
char
*
ptr
=
array
.
data
();
SMARTLINK_MSG
*
pMsg
=
(
SMARTLINK_MSG
*
)
ptr
;
pMsg
->
Mark
=
0x55AA
;
pMsg
->
version
=
1
;
pMsg
->
Priority
=
0
;
pMsg
->
Reserved1
=
0
;
pMsg
->
SerialNum
=
0
;
pMsg
->
source_id
=
(
quint32
)((
quint64
)(
pSock
)
&
0xffffffff
);
pMsg
->
destin_id
=
(
quint32
)
0xffffffff
;
pMsg
->
Reserved2
=
0
;
pMsg
->
data_length
=
nMsgLen
;
for
(
int
i
=
0
;
i
<
nMsgLen
;
i
++
)
pMsg
->
data
[
i
]
=
'0'
+
i
%
10
;
SMARTLINK_HEARTBEATING
*
pMsg
=
(
SMARTLINK_HEARTBEATING
*
)
ptr
;
pMsg
->
Mark
=
0xBEBE
;
pMsg
->
tmStamp
=
0
;
//3/10 possibility to send a data block to server
(
pSock
)
->
SendData
(
array
);
}
...
...
ZoomPipeline_FuncSvr/smartlink/st_client_table.cpp
浏览文件 @
94722e9d
...
...
@@ -12,7 +12,6 @@ st_client_table::st_client_table(ZPNetwork::zp_net_ThreadPool * pool, ZPTaskEngi
connect
(
m_pThreadPool
,
&
ZPNetwork
::
zp_net_ThreadPool
::
evt_ClientDisconnected
,
this
,
&
st_client_table
::
on_evt_ClientDisconnected
,
Qt
::
QueuedConnection
);
connect
(
m_pThreadPool
,
&
ZPNetwork
::
zp_net_ThreadPool
::
evt_Data_recieved
,
this
,
&
st_client_table
::
on_evt_Data_recieved
,
Qt
::
QueuedConnection
);
connect
(
m_pThreadPool
,
&
ZPNetwork
::
zp_net_ThreadPool
::
evt_Data_transferred
,
this
,
&
st_client_table
::
on_evt_Data_transferred
,
Qt
::
QueuedConnection
);
}
st_client_table
::~
st_client_table
()
{
...
...
@@ -80,6 +79,7 @@ void st_client_table::on_evt_ClientDisconnected(QObject * clientHandle)
disconnect
(
pClientNode
,
&
st_clientNode
::
evt_SendDataToClient
,
m_pThreadPool
,
&
ZPNetwork
::
zp_net_ThreadPool
::
SendDataToClient
);
disconnect
(
pClientNode
,
&
st_clientNode
::
evt_BroadcastData
,
m_pThreadPool
,
&
ZPNetwork
::
zp_net_ThreadPool
::
evt_BroadcastData
);
disconnect
(
pClientNode
,
&
st_clientNode
::
evt_close_client
,
m_pThreadPool
,
&
ZPNetwork
::
zp_net_ThreadPool
::
KickClients
);
disconnect
(
pClientNode
,
&
st_clientNode
::
evt_Message
,
this
,
&
st_client_table
::
evt_Message
);
m_nodeToBeDel
.
push_back
(
pClientNode
);
//qDebug()<<QString("%1(ref %2) Node Push in queue.\n").arg((unsigned int)pClientNode).arg(pClientNode->ref());
...
...
@@ -123,6 +123,7 @@ void st_client_table::on_evt_Data_recieved(QObject * clientHandle,const QByteA
connect
(
pnode
,
&
st_clientNode
::
evt_SendDataToClient
,
m_pThreadPool
,
&
ZPNetwork
::
zp_net_ThreadPool
::
SendDataToClient
,
Qt
::
QueuedConnection
);
connect
(
pnode
,
&
st_clientNode
::
evt_BroadcastData
,
m_pThreadPool
,
&
ZPNetwork
::
zp_net_ThreadPool
::
evt_BroadcastData
,
Qt
::
QueuedConnection
);
connect
(
pnode
,
&
st_clientNode
::
evt_close_client
,
m_pThreadPool
,
&
ZPNetwork
::
zp_net_ThreadPool
::
KickClients
,
Qt
::
QueuedConnection
);
connect
(
pnode
,
&
st_clientNode
::
evt_Message
,
this
,
&
st_client_table
::
evt_Message
,
Qt
::
QueuedConnection
);
m_hash_sock2node
[
clientHandle
]
=
pnode
;
nHashContains
=
true
;
pClientNode
=
pnode
;
...
...
ZoomPipeline_FuncSvr/smartlink/st_client_table.h
浏览文件 @
94722e9d
...
...
@@ -29,6 +29,7 @@ protected:
ZPNetwork
::
zp_net_ThreadPool
*
m_pThreadPool
;
ZPTaskEngine
::
zp_pipeline
*
m_pTaskEngine
;
signals:
void
evt_Message
(
const
QString
&
);
public
slots
:
//this event indicates new client connected.
...
...
ZoomPipeline_FuncSvr/smartlink/st_clientnode.cpp
浏览文件 @
94722e9d
...
...
@@ -11,6 +11,7 @@ st_clientNode::st_clientNode(st_client_table * pClientTable, QObject * pClientSo
m_uuid
=
0xffffffff
;
//Not Valid
m_pClientTable
=
pClientTable
;
bTermSet
=
false
;
m_last_Report
=
QDateTime
::
currentDateTime
();
}
//The main functional method, will run in thread pool
...
...
@@ -70,90 +71,138 @@ int st_clientNode::push_new_data(const QByteArray & dtarray)
m_list_RawData
.
push_back
(
dtarray
);
res
=
m_list_RawData
.
size
();
m_mutex
.
unlock
();
m_last_Report
=
QDateTime
::
currentDateTime
();
return
res
;
}
//!deal one message, affect m_currentRedOffset,m_currentMessageSize,m_currentHeader
//!return bytes Used.
int
st_clientNode
::
filter_message
(
const
QByteArray
&
block
,
int
offset
)
{
while
(
block
.
length
()
>
offset
)
const
int
blocklen
=
block
.
length
();
while
(
blocklen
>
offset
)
{
const
char
*
dataptr
=
block
.
constData
();
while
(
m_currentMessageSize
<
sizeof
(
SMARTLINK_MSG
)
-
1
)
//Recieve First 2 byte
while
(
m_currentMessageSize
<
2
&&
blocklen
>
offset
)
{
m_currentBlock
.
push_back
(
dataptr
[
offset
++
]);
m_currentMessageSize
++
;
if
(
offset
>=
block
.
length
())
break
;
}
if
(
m_currentMessageSize
<
sizeof
(
SMARTLINK_MSG
)
-
1
)
//Header not completed.
if
(
m_currentMessageSize
<
2
)
//First 2 byte not complete
continue
;
else
if
(
m_currentMessageSize
==
sizeof
(
SMARTLINK_MSG
)
-
1
)
//Header just completed.
if
(
m_currentMessageSize
==
2
)
{
const
char
*
headerptr
=
m_currentBlock
.
constData
();
memcpy
((
void
*
)
&
m_currentHeader
,
headerptr
,
sizeof
(
SMARTLINK_MSG
)
-
1
);
memcpy
((
void
*
)
&
m_currentHeader
,
headerptr
,
2
);
}
//continue reading if there is data left behind
if
(
block
.
length
()
>
offset
)
const
char
*
ptrCurrData
=
m_currentBlock
.
constData
();
//Heart Beating
if
(
m_currentHeader
.
Mark
==
0xBEBE
)
{
while
(
m_currentMessageSize
<
sizeof
(
SMARTLINK_HEARTBEATING
)
&&
blocklen
>
offset
)
{
qint32
bitLeft
=
m_currentHeader
.
data_length
+
sizeof
(
SMARTLINK_MSG
)
-
1
-
m_currentMessageSize
;
while
(
bitLeft
>
0
&&
block
.
length
()
>
offset
)
m_currentBlock
.
push_back
(
dataptr
[
offset
++
]);
m_currentMessageSize
++
;
}
if
(
m_currentMessageSize
<
sizeof
(
SMARTLINK_HEARTBEATING
))
//Header not completed.
continue
;
//Send back
emit
evt_SendDataToClient
(
this
->
sock
(),
m_currentBlock
);
//This Message is Over. Start a new one.
m_currentMessageSize
=
0
;
m_currentBlock
=
QByteArray
();
continue
;
}
else
if
(
m_currentHeader
.
Mark
==
0x55AA
)
//Trans Message
{
while
(
m_currentMessageSize
<
sizeof
(
SMARTLINK_MSG
)
-
1
&&
blocklen
>
offset
)
{
m_currentBlock
.
push_back
(
dataptr
[
offset
++
]);
m_currentMessageSize
++
;
}
if
(
m_currentMessageSize
<
sizeof
(
SMARTLINK_MSG
)
-
1
)
//Header not completed.
continue
;
else
if
(
m_currentMessageSize
==
sizeof
(
SMARTLINK_MSG
)
-
1
)
//Header just completed.
{
const
char
*
headerptr
=
m_currentBlock
.
constData
();
memcpy
((
void
*
)
&
m_currentHeader
,
headerptr
,
sizeof
(
SMARTLINK_MSG
)
-
1
);
//continue reading if there is data left behind
if
(
block
.
length
()
>
offset
)
{
m_currentBlock
.
push_back
(
dataptr
[
offset
++
]);
m_currentMessageSize
++
;
bitLeft
--
;
}
if
(
m_currentHeader
.
Mark
==
0x55AA
)
qint32
bitLeft
=
m_currentHeader
.
data_length
+
sizeof
(
SMARTLINK_MSG
)
-
1
-
m_currentMessageSize
;
while
(
bitLeft
>
0
&&
blocklen
>
offset
)
{
m_currentBlock
.
push_back
(
dataptr
[
offset
++
]);
m_currentMessageSize
++
;
bitLeft
--
;
}
//deal block, may be send data as soon as possible;
deal_current_message_block
();
else
//Bad MSG!
{
emit
evt_close_client
(
this
->
sock
());
}
if
(
bitLeft
>
0
)
if
(
bitLeft
>
0
)
continue
;
//This Message is Over. Start a new one.
m_currentMessageSize
=
0
;
m_currentBlock
=
QByteArray
();
continue
;
//This Message is Over. Start a new one.
m_currentMessageSize
=
0
;
m_currentBlock
.
clear
();
continue
;
}
}
}
else
{
if
(
block
.
length
()
>
offset
)
else
{
qint32
bitLeft
=
m_currentHeader
.
data_length
+
sizeof
(
SMARTLINK_MSG
)
-
1
-
m_currentMessageSize
;
while
(
bitLeft
>
0
&&
block
.
length
()
>
offset
)
if
(
block
.
length
()
>
offset
)
{
m_currentBlock
.
push_back
(
dataptr
[
offset
++
]);
m_currentMessageSize
++
;
bitLeft
--
;
}
//deal block, may be processed as soon as possible;
deal_current_message_block
();
if
(
bitLeft
>
0
)
qint32
bitLeft
=
m_currentHeader
.
data_length
+
sizeof
(
SMARTLINK_MSG
)
-
1
-
m_currentMessageSize
;
while
(
bitLeft
>
0
&&
blocklen
>
offset
)
{
m_currentBlock
.
push_back
(
dataptr
[
offset
++
]);
m_currentMessageSize
++
;
bitLeft
--
;
}
//deal block, may be processed as soon as possible;
deal_current_message_block
();
if
(
bitLeft
>
0
)
continue
;
//This Message is Over. Start a new one.
m_currentMessageSize
=
0
;
m_currentBlock
=
QByteArray
();
continue
;
//This Message is Over. Start a new one.
m_currentMessageSize
=
0
;
m_currentBlock
.
clear
();
continue
;
}
}
}
}
// end if there is more bytes to append
}
//end deal trans message
else
{
emit
evt_Message
(
tr
(
"Client Send a unknown start Header %1 %2. Close client immediately."
)
.
arg
((
int
)(
ptrCurrData
[
0
])).
arg
((
int
)(
ptrCurrData
[
1
])));
m_currentMessageSize
=
0
;
m_currentBlock
=
QByteArray
();
offset
=
blocklen
;
}
emit
evt_close_client
(
this
->
sock
());
}
}
// end while block len > offset
return
offset
;
}
//!deal current message
int
st_clientNode
::
deal_current_message_block
()
{
//First, get uuid as soon as possible
if
(
m_bUUIDRecieved
==
false
)
{
if
(
m_currentHeader
.
source_id
!=
0xffffffff
)
if
(
m_currentHeader
.
source_id
>=
0x00010000
&&
m_currentHeader
.
source_id
<=
0x0FFFFFFF
)
{
m_bUUIDRecieved
=
true
;
m_uuid
=
m_currentHeader
.
source_id
;
//regisit client node to hash-table;
m_pClientTable
->
regisitClientUUID
(
this
);
}
else
if
(
m_currentHeader
.
source_id
>=
(
unsigned
int
)
0x80000000
&&
m_currentHeader
.
source_id
<=
(
unsigned
int
)
0xAFFFFFFF
)
{
m_bUUIDRecieved
=
true
;
m_uuid
=
m_currentHeader
.
source_id
;
...
...
@@ -161,25 +210,40 @@ int st_clientNode::deal_current_message_block()
m_pClientTable
->
regisitClientUUID
(
this
);
}
else
//Invalid
{
emit
evt_Message
(
tr
(
"Client ID is invalid! Close client immediatly."
));
m_currentBlock
=
QByteArray
();
emit
evt_close_client
(
this
->
sock
());
return
0
;
}
}
//then , Start deal to-server messages
if
(
m_currentHeader
.
destin_id
==
0xffffffff
)
//Server - deal messages
if
(
m_currentHeader
.
destin_id
==
0x00000001
)
{
//need furture works.
if
(
m_currentHeader
.
data_length
==
0
)
//heart-beating
{
emit
evt_SendDataToClient
(
this
->
sock
(),
m_currentBlock
);
m_currentBlock
.
clear
();
}
else
{
//Do Nothing
m_currentBlock
.
clear
();
}
//Do Nothing
m_currentBlock
=
QByteArray
();
emit
evt_Message
(
tr
(
"To-server Message is not currently supported."
));
}
//deal Broadcast messages
else
if
(
m_currentHeader
.
destin_id
==
0xFFFFFFFC
)
{
//need furture works.
//Do Nothing
emit
evt_Message
(
tr
(
"Broadcast Message is not currently supported."
));
m_currentBlock
=
QByteArray
();
}
else
if
(
m_currentHeader
.
destin_id
==
0xFFFFFFFD
)
{
//need furture works.
//Do Nothing
emit
evt_Message
(
tr
(
"Broadcast Message is not currently supported."
));
m_currentBlock
=
QByteArray
();
}
//deal client-to-client messages
else
{
//find Destin Client using Hash.
...
...
@@ -189,13 +253,14 @@ int st_clientNode::deal_current_message_block()
//need further dev, insert into db, or catched on disk.
//destin client is un-reachable, or in another function server.
//need server-to-server channels to re-post this message.
qDebug
()
<<
"Destin ID "
<<
m_currentHeader
.
destin_id
<<
"is not valid
\n
"
;
emit
evt_Message
(
tr
(
"Destin ID "
)
+
QString
(
"%1"
).
arg
(
m_currentHeader
.
destin_id
)
+
tr
(
" is not currently logged in.
\n
"
));
//Do Nothing
}
else
{
emit
evt_SendDataToClient
(
destin_node
->
sock
(),
m_currentBlock
);
m_currentBlock
.
clear
();
m_currentBlock
=
QByteArray
();
}
}
...
...
ZoomPipeline_FuncSvr/smartlink/st_clientnode.h
浏览文件 @
94722e9d
...
...
@@ -4,6 +4,7 @@
#include <QObject>
#include <QList>
#include <QMutex>
#include <QDateTime>
#include "st_message.h"
#include "../pipeline/zp_pltaskbase.h"
namespace
SmartLink
{
...
...
@@ -28,6 +29,12 @@ public:
QObject
*
sock
()
{
return
m_pClientSock
;}
bool
uuidValid
(){
return
m_bUUIDRecieved
;}
bool
bTermSet
;
QDateTime
lastActiveTime
()
{
return
m_last_Report
;
}
protected:
//!deal one message, affect m_currentRedOffset,m_currentMessageSize,m_currentHeader
//!return bytes Used.
...
...
@@ -57,10 +64,14 @@ protected:
st_client_table
*
m_pClientTable
;
QDateTime
m_last_Report
;
signals:
void
evt_SendDataToClient
(
QObject
*
objClient
,
const
QByteArray
&
dtarray
);
void
evt_BroadcastData
(
QObject
*
objFromClient
,
const
QByteArray
&
dtarray
);
void
evt_close_client
(
QObject
*
objClient
);
void
evt_Message
(
const
QString
&
);
};
}
...
...
ZoomPipeline_FuncSvr/smartlink/st_message.h
浏览文件 @
94722e9d
...
...
@@ -17,6 +17,11 @@ typedef struct tag_smartlink_message{
__UINT16_TYPE__
Reserved2
;
__UINT8_TYPE__
data
[
1
];
}
SMARTLINK_MSG
;
typedef
struct
tag_smartlink_heartBeating
{
__UINT16_TYPE__
Mark
;
//Always be 0xBeBe
__UINT16_TYPE__
tmStamp
;
}
SMARTLINK_HEARTBEATING
;
#endif
#if defined(_MSC_VER)
...
...
@@ -32,6 +37,11 @@ typedef struct tag_smartlink_message{
unsigned
__int16
Reserved2
;
unsigned
__int8
data
[
1
];
}
SMARTLINK_MSG
;
typedef
struct
tag_smartlink_heartBeating
{
unsigned
__int16
Mark
;
//Always be 0xBeBe
unsigned
__int16
tmStamp
;
}
SMARTLINK_HEARTBEATING
;
#endif
...
...
ZoomPipeline_FuncSvr/zpmainframe.cpp
浏览文件 @
94722e9d
...
...
@@ -24,7 +24,7 @@ ZPMainFrame::ZPMainFrame(QWidget *parent) :
m_taskEngine
=
new
zp_pipeline
(
this
);
//Create Smartlink client table
m_clientTable
=
new
SmartLink
::
st_client_table
(
m_netEngine
,
m_taskEngine
,
this
);
connect
(
m_clientTable
,
&
SmartLink
::
st_client_table
::
evt_Message
,
this
,
&
ZPMainFrame
::
on_evt_Message
);
//Create databases
m_pDatabases
=
new
ZPDatabase
::
DatabaseResource
(
this
);
connect
(
m_pDatabases
,
&
ZPDatabase
::
DatabaseResource
::
evt_Message
,
this
,
&
ZPMainFrame
::
on_evt_Message
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录