Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
U
uniset2
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
UniSet project repositories
uniset2
Commits
eceea3c3
Commit
eceea3c3
authored
Mar 05, 2021
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix after merge
parent
36839d01
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
0 additions
and
406 deletions
+0
-406
configure.ac
configure.ac
+0
-3
Makefile.am
extensions/Makefile.am
+0
-4
Makefile.am
extensions/UWebSocketGate/Makefile.am
+0
-6
UWebSocketGate.cc
extensions/UWebSocketGate/UWebSocketGate.cc
+0
-322
UWebSocketGate.h
extensions/UWebSocketGate/UWebSocketGate.h
+0
-68
uniset2.files
uniset2.files
+0
-3
No files found.
configure.ac
View file @
eceea3c3
...
...
@@ -594,10 +594,7 @@ AC_CONFIG_FILES([Makefile
extensions/HttpResolver/Makefile
extensions/HttpResolver/tests/Makefile
extensions/UWebSocketGate/Makefile
<<<<<<< HEAD
=======
extensions/UWebSocketGate/tests/Makefile
>>>>>>> 2.9.4-alt0.1
testsuite/Makefile
wrappers/Makefile
wrappers/python/lib/Makefile
...
...
extensions/Makefile.am
View file @
eceea3c3
...
...
@@ -7,11 +7,7 @@ SUBDIRS = lib include SharedMemory SharedMemory/tests IOControl IOControl/tests
ModbusMaster ModbusSlave SMViewer UniNetwork UNetUDP UNetUDP/tests
\
DBServer-MySQL DBServer-SQLite DBServer-PostgreSQL MQTTPublisher
\
RRDServer tests ModbusMaster/tests ModbusSlave/tests LogDB LogDB/tests
\
<<<<<<
< HEAD
Backend-OpenTSDB
HttpResolver
HttpResolver/tests
UWebSocketGate
=======
Backend-OpenTSDB HttpResolver HttpResolver/tests UWebSocketGate UWebSocketGate/tests
>>>>>>>
2.9.4-alt0.1
pkgconfigdir
=
$(libdir)
/pkgconfig
...
...
extensions/UWebSocketGate/Makefile.am
View file @
eceea3c3
<<<<<<<
HEAD
=======
if
ENABLE_REST_API
>>>>>>>
2.9.4-alt0.1
bin_PROGRAMS
=
@PACKAGE@-wsgate
@PACKAGE@
_wsgate_LDADD
=
$(top_builddir)
/lib/libUniSet2.la
@PACKAGE@
_wsgate_SOURCES
=
UWebSocketGate.cc main.cc
include
$(top_builddir)/include.mk
<<<<<<<
HEAD
=======
endif
>>>>>>>
2.9.4-alt0.1
extensions/UWebSocketGate/UWebSocketGate.cc
View file @
eceea3c3
...
...
@@ -66,15 +66,6 @@ UWebSocketGate::UWebSocketGate( uniset::ObjectId id, xmlNode* cnode, const strin
sigINT
.
set
<
UWebSocketGate
,
&
UWebSocketGate
::
onTerminate
>
(
this
);
iocheck
.
set
<
UWebSocketGate
,
&
UWebSocketGate
::
checkMessages
>
(
this
);
<<<<<<<
HEAD
#ifndef DISABLE_REST_API
wsHeartbeatTime_sec
=
(
float
)
conf
->
getArgPInt
(
"--"
+
prefix
+
"ws-heartbeat-time"
,
it
.
getProp
(
"wsPingTime"
),
wsHeartbeatTime_sec
)
/
1000.0
;
wsSendTime_sec
=
(
float
)
conf
->
getArgPInt
(
"--"
+
prefix
+
"ws-send-time"
,
it
.
getProp
(
"wsSendTime"
),
wsSendTime_sec
)
/
1000.0
;
wsMaxSend
=
conf
->
getArgPInt
(
"--"
+
prefix
+
"ws-max-send"
,
it
.
getProp
(
"wsMaxSend"
),
wsMaxSend
);
httpHost
=
conf
->
getArgParam
(
"--"
+
prefix
+
"httpserver-host"
,
"localhost"
);
httpPort
=
conf
->
getArgPInt
(
"--"
+
prefix
+
"httpserver-port"
,
8080
);
=======
maxMessagesProcessing
=
conf
->
getArgPInt
(
"--"
+
prefix
+
"max-messages-processing"
,
conf
->
getField
(
"maxMessagesProcessing"
),
maxMessagesProcessing
);
if
(
maxMessagesProcessing
<
0
)
...
...
@@ -94,7 +85,6 @@ UWebSocketGate::UWebSocketGate( uniset::ObjectId id, xmlNode* cnode, const strin
httpHost
=
conf
->
getArgParam
(
"--"
+
prefix
+
"httpserver-host"
,
"localhost"
);
httpPort
=
conf
->
getArgPInt
(
"--"
+
prefix
+
"httpserver-port"
,
8081
);
>>>>>>>
2.9.4
-
alt0
.1
httpCORS_allow
=
conf
->
getArgParam
(
"--"
+
prefix
+
"httpserver-cors-allow"
,
"*"
);
mylog1
<<
myname
<<
"(init): http server parameters "
<<
httpHost
<<
":"
<<
httpPort
<<
endl
;
...
...
@@ -168,12 +158,6 @@ void UWebSocketGate::checkMessages( ev::timer& t, int revents )
if
(
EV_ERROR
&
revents
)
return
;
<<<<<<<
HEAD
auto
m
=
receiveMessage
();
if
(
m
)
processingMessage
(
m
.
get
());
=======
for
(
int
i
=
0
;
i
<
maxMessagesProcessing
;
i
++
)
{
auto
m
=
receiveMessage
();
...
...
@@ -183,56 +167,18 @@ void UWebSocketGate::checkMessages( ev::timer& t, int revents )
processingMessage
(
m
.
get
());
}
>>>>>>>
2.9.4
-
alt0
.1
}
//--------------------------------------------------------------------------------------------
void
UWebSocketGate
::
sensorInfo
(
const
SensorMessage
*
sm
)
{
uniset_rwmutex_wrlock
lock
(
wsocksMutex
);
<<<<<<<
HEAD
=======
mylog5
<<
myname
<<
"(sensorInfo): sid="
<<
sm
->
id
<<
" val="
<<
sm
->
value
<<
endl
;
>>>>>>>
2.9.4
-
alt0
.1
for
(
auto
&&
s
:
wsocks
)
s
->
sensorInfo
(
sm
);
}
//--------------------------------------------------------------------------------------------
<<<<<<<
HEAD
UWebSocketGate
::
RespondFormat
UWebSocketGate
::
from_string
(
const
string
&
str
)
{
if
(
str
==
"json"
)
return
RespondFormat
::
JSON
;
if
(
str
==
"txt"
)
return
RespondFormat
::
TXT
;
if
(
str
==
"raw"
)
return
RespondFormat
::
RAW
;
return
RespondFormat
::
UNKNOWN
;
}
//--------------------------------------------------------------------------------------------
UTCPCore
::
Buffer
*
UWebSocketGate
::
format
(
const
SensorMessage
*
sm
,
const
std
::
string
&
err
,
const
RespondFormat
fmt
)
{
if
(
fmt
==
RespondFormat
::
JSON
)
return
to_json
(
sm
,
err
);
if
(
fmt
==
RespondFormat
::
TXT
)
return
to_txt
(
sm
,
err
);
if
(
fmt
==
RespondFormat
::
RAW
)
return
to_json
(
sm
,
err
);
return
to_json
(
sm
,
err
);
}
//--------------------------------------------------------------------------------------------
UTCPCore
::
Buffer
*
UWebSocketGate
::
to_json
(
const
SensorMessage
*
sm
,
const
std
::
string
&
err
)
{
Poco
::
JSON
::
Object
::
Ptr
json
=
new
Poco
::
JSON
::
Object
();
=======
Poco
::
JSON
::
Object
::
Ptr
UWebSocketGate
::
UWebSocket
::
to_short_json
(
sinfo
*
si
)
{
Poco
::
JSON
::
Object
::
Ptr
json
=
new
Poco
::
JSON
::
Object
();
...
...
@@ -248,18 +194,13 @@ Poco::JSON::Object::Ptr UWebSocketGate::to_json( const SensorMessage* sm, const
Poco
::
JSON
::
Object
::
Ptr
json
=
new
Poco
::
JSON
::
Object
();
json
->
set
(
"type"
,
"SensorInfo"
);
>>>>>>>
2.9.4
-
alt0
.1
json
->
set
(
"error"
,
err
);
json
->
set
(
"id"
,
sm
->
id
);
json
->
set
(
"value"
,
sm
->
value
);
json
->
set
(
"name"
,
uniset
::
ORepHelpers
::
getShortName
(
uniset_conf
()
->
oind
->
getMapName
(
sm
->
id
)));
json
->
set
(
"sm_tv_sec"
,
sm
->
sm_tv
.
tv_sec
);
json
->
set
(
"sm_tv_nsec"
,
sm
->
sm_tv
.
tv_nsec
);
<<<<<<<
HEAD
json
->
set
(
"type"
,
uniset
::
iotype2str
(
sm
->
sensor_type
));
=======
json
->
set
(
"iotype"
,
uniset
::
iotype2str
(
sm
->
sensor_type
));
>>>>>>>
2.9.4
-
alt0
.1
json
->
set
(
"undefined"
,
sm
->
undefined
);
json
->
set
(
"supplier"
,
sm
->
supplier
);
json
->
set
(
"tv_sec"
,
sm
->
tm
.
tv_sec
);
...
...
@@ -273,36 +214,7 @@ Poco::JSON::Object::Ptr UWebSocketGate::to_json( const SensorMessage* sm, const
calibr
->
set
(
"rmax"
,
sm
->
ci
.
maxRaw
);
calibr
->
set
(
"precision"
,
sm
->
ci
.
precision
);
<<<<<<<
HEAD
ostringstream
out
;
json
->
stringify
(
out
);
return
new
UTCPCore
::
Buffer
(
out
.
str
());
}
//--------------------------------------------------------------------------------------------
UTCPCore
::
Buffer
*
UWebSocketGate
::
to_txt
(
const
SensorMessage
*
sm
,
const
std
::
string
&
err
)
{
ostringstream
out
;
if
(
err
.
empty
()
)
out
<<
SMonitor
::
printEvent
(
sm
)
<<
endl
;
else
{
out
<<
uniset
::
timeToString
(
sm
->
sm_tv
.
tv_sec
)
<<
"("
<<
setw
(
9
)
<<
sm
->
sm_tv
.
tv_nsec
<<
")"
<<
" id="
<<
sm
->
id
<<
" error="
<<
err
<<
endl
;
}
return
new
UTCPCore
::
Buffer
(
out
.
str
());
}
//--------------------------------------------------------------------------------------------
UTCPCore
::
Buffer
*
UWebSocketGate
::
to_raw
(
const
SensorMessage
*
sm
,
const
std
::
string
&
err
)
{
return
new
UTCPCore
::
Buffer
(
(
const
unsigned
char
*
)(
sm
),
sizeof
(
*
sm
)
);
=======
return
json
;
>>>>>>>
2.9.4
-
alt0
.1
}
//--------------------------------------------------------------------------------------------
std
::
shared_ptr
<
UWebSocketGate
>
UWebSocketGate
::
init_wsgate
(
int
argc
,
const
char
*
const
*
argv
,
const
std
::
string
&
prefix
)
...
...
@@ -321,29 +233,16 @@ std::shared_ptr<UWebSocketGate> UWebSocketGate::init_wsgate( int argc, const cha
void
UWebSocketGate
::
help_print
()
{
cout
<<
"Default: prefix='ws'"
<<
endl
;
<<<<<<<
HEAD
cout
<<
"--prefix-name name - Имя. Для поиска настроечной секции в configure.xml"
<<
endl
;
=======
cout
<<
"--prefix-name name - Имя. Для поиска настроечной секции в configure.xml"
<<
endl
;
cout
<<
"--uniset-object-size-message-queue num - Размер uniset-очереди сообщений"
<<
endl
;
cout
<<
"--prefix-msg-check-time msec - Период опроса uniset-очереди сообщений, для обработки новых сообщений. По умолчанию: 10 мсек"
<<
endl
;
cout
<<
"--prefix-max-messages-processing num - Количество uniset-сообщений обрабатывамых за один раз. По умолчанию 50. По умолчанию: 100"
<<
endl
;
>>>>>>>
2.9.4
-
alt0
.1
cout
<<
"websockets: "
<<
endl
;
cout
<<
"--prefix-ws-max num - Максимальное количество websocket-ов"
<<
endl
;
cout
<<
"--prefix-ws-heartbeat-time msec - Период сердцебиения в соединении. По умолчанию: 3000 мсек"
<<
endl
;
cout
<<
"--prefix-ws-send-time msec - Период посылки сообщений. По умолчанию: 500 мсек"
<<
endl
;
cout
<<
"--prefix-ws-max num - Максимальное число сообщений посылаемых за один раз. По умолчанию: 200"
<<
endl
;
<<<<<<<
HEAD
cout
<<
"http: "
<<
endl
;
cout
<<
"--prefix-httpserver-host ip - IP на котором слушает http сервер. По умолчанию: localhost"
<<
endl
;
cout
<<
"--prefix-httpserver-port num - Порт на котором принимать запросы. По умолчанию: 8080"
<<
endl
;
cout
<<
"--prefix-httpserver-max-queued num - Размер очереди запросов к http серверу. По умолчанию: 100"
<<
endl
;
cout
<<
"--prefix-httpserver-max-threads num - Разрешённое количество потоков для http-сервера. По умолчанию: 3"
<<
endl
;
cout
<<
"--prefix-httpserver-cors-allow addr - (CORS): Access-Control-Allow-Origin. Default: *"
<<
endl
;
=======
cout
<<
"--prefix-ws-cmd num - Максимальное число команд обрабатываемых за один раз. По умолчанию: 100"
<<
endl
;
cout
<<
"http: "
<<
endl
;
...
...
@@ -352,7 +251,6 @@ void UWebSocketGate::help_print()
cout
<<
"--prefix-httpserver-max-queued num - Размер очереди запросов к http серверу. По умолчанию: 100"
<<
endl
;
cout
<<
"--prefix-httpserver-max-threads num - Разрешённое количество потоков для http-сервера. По умолчанию: 3"
<<
endl
;
cout
<<
"--prefix-httpserver-cors-allow addr - (CORS): Access-Control-Allow-Origin. Default: *"
<<
endl
;
>>>>>>>
2.9.4
-
alt0
.1
}
// -----------------------------------------------------------------------------
void
UWebSocketGate
::
run
(
bool
async
)
...
...
@@ -509,51 +407,6 @@ void UWebSocketGate::handleRequest( Poco::Net::HTTPServerRequest& req, Poco::Net
// проверка подключения к страничке со списком websocket-ов
if
(
!
seg
.
empty
()
&&
seg
[
0
]
==
"wsgate"
)
{
<<<<<<<
HEAD
if
(
seg
.
size
()
>
2
)
{
if
(
seg
[
1
]
==
"json"
||
seg
[
1
]
==
"txt"
||
seg
[
1
]
==
"raw"
)
{
ostringstream
params
;
params
<<
seg
[
2
]
<<
"&format="
<<
seg
[
1
];
httpWebSocketConnectPage
(
out
,
req
,
resp
,
params
.
str
());
}
else
{
auto
jdata
=
respError
(
resp
,
HTTPResponse
::
HTTP_BAD_REQUEST
,
"Unknown format. Must be [json,txt,raw]"
);
jdata
->
stringify
(
out
);
out
.
flush
();
}
return
;
}
if
(
seg
.
size
()
>
1
)
{
if
(
seg
[
1
]
==
"json"
||
seg
[
1
]
==
"txt"
||
seg
[
1
]
==
"raw"
)
{
ostringstream
params
;
auto
qp
=
uri
.
getQueryParameters
();
for
(
const
auto
&
p
:
qp
)
{
params
<<
p
.
first
;
if
(
!
p
.
second
.
empty
()
)
params
<<
"="
<<
p
.
second
;
params
<<
"&"
;
}
params
<<
"format="
<<
seg
[
1
];
httpWebSocketConnectPage
(
out
,
req
,
resp
,
params
.
str
());
}
else
httpWebSocketConnectPage
(
out
,
req
,
resp
,
seg
[
1
]);
return
;
}
=======
ostringstream
params
;
auto
qp
=
uri
.
getQueryParameters
();
...
...
@@ -575,15 +428,10 @@ void UWebSocketGate::handleRequest( Poco::Net::HTTPServerRequest& req, Poco::Net
httpWebSocketConnectPage
(
out
,
req
,
resp
,
params
.
str
());
out
.
flush
();
return
;
>>>>>>>
2.9.4
-
alt0
.1
}
// default page
httpWebSocketPage
(
out
,
req
,
resp
);
<<<<<<<
HEAD
=======
>>>>>>>
2.9.4
-
alt0
.1
out
.
flush
();
}
// -----------------------------------------------------------------------------
...
...
@@ -618,11 +466,7 @@ void UWebSocketGate::onWebSocketSession(Poco::Net::HTTPServerRequest& req, Poco:
mylog3
<<
req
.
getHost
()
<<
": WSOCKET: "
<<
uri
.
getQuery
()
<<
endl
;
<<<<<<<
HEAD
// example: ws://host:port/wsgate/?s1,s2,s3,s4&format=[json,txt,raw]
=======
// example: ws://host:port/wsgate/?s1,s2,s3,s4
>>>>>>>
2.9.4
-
alt0
.1
if
(
seg
.
empty
()
||
seg
[
0
]
!=
"wsgate"
)
{
resp
.
setStatus
(
HTTPResponse
::
HTTP_BAD_REQUEST
);
...
...
@@ -630,11 +474,7 @@ void UWebSocketGate::onWebSocketSession(Poco::Net::HTTPServerRequest& req, Poco:
resp
.
setStatusAndReason
(
HTTPResponse
::
HTTP_BAD_REQUEST
);
resp
.
setContentLength
(
0
);
std
::
ostream
&
err
=
resp
.
send
();
<<<<<<<
HEAD
err
<<
"Bad request. Must be: ws://host:port/wsgate/?s1,s2,s3,s4&format=[json,txt,raw]"
;
=======
err
<<
"Bad request. Must be: ws://host:port/wsgate/?s1,s2,s3,s4"
;
>>>>>>>
2.9.4
-
alt0
.1
err
.
flush
();
return
;
}
...
...
@@ -695,49 +535,17 @@ std::shared_ptr<UWebSocketGate::UWebSocket> UWebSocketGate::newWebSocket( Poco::
std
::
shared_ptr
<
UWebSocket
>
ws
;
<<<<<<<
HEAD
RespondFormat
fmt
=
RespondFormat
::
JSON
;
=======
>>>>>>>
2.9.4
-
alt0
.1
std
::
string
slist
(
""
);
for
(
const
auto
&
p
:
qp
)
{
<<<<<<<
HEAD
// обрабатываем только первый встреченный параметр
if
(
p
.
first
==
"format"
)
fmt
=
from_string
(
p
.
second
);
else
if
(
p
.
second
.
empty
()
&&
!
p
.
first
.
empty
()
)
=======
if
(
p
.
second
.
empty
()
&&
!
p
.
first
.
empty
()
)
>>>>>>>
2.9.4
-
alt0
.1
slist
+=
(
","
+
p
.
first
);
}
if
(
qp
.
size
()
==
1
&&
qp
[
0
].
first
.
empty
()
)
slist
=
qp
[
0
].
first
;
<<<<<<<
HEAD
// auto idlist = uniset::explode(slist);
#warning DEBUG
auto
idlist
=
uniset
::
explode
(
"34,23,54"
);
if
(
idlist
.
empty
()
)
{
resp
->
setStatus
(
HTTPResponse
::
HTTP_BAD_REQUEST
);
resp
->
setContentType
(
"text/html"
);
resp
->
setStatusAndReason
(
HTTPResponse
::
HTTP_BAD_REQUEST
);
resp
->
setContentLength
(
0
);
std
::
ostream
&
err
=
resp
->
send
();
err
<<
"Error: no list of sensors for '"
<<
slist
<<
"'. Use: http://host:port/wsgate/?s1,s2,s3"
;
err
.
flush
();
mywarn
<<
myname
<<
"(newWebSocket): error: no list of sensors for '"
<<
slist
<<
"'"
<<
endl
;
return
nullptr
;
}
=======
auto
idlist
=
uniset
::
explode
(
slist
);
// if( idlist.empty() )
...
...
@@ -754,7 +562,6 @@ std::shared_ptr<UWebSocketGate::UWebSocket> UWebSocketGate::newWebSocket( Poco::
// return nullptr;
// }
>>>>>>>
2.9.4
-
alt0
.1
{
uniset_rwmutex_wrlock
lock
(
wsocksMutex
);
...
...
@@ -762,19 +569,6 @@ std::shared_ptr<UWebSocketGate::UWebSocket> UWebSocketGate::newWebSocket( Poco::
ws
->
setHearbeatTime
(
wsHeartbeatTime_sec
);
ws
->
setSendPeriod
(
wsSendTime_sec
);
ws
->
setMaxSendCount
(
wsMaxSend
);
<<<<<<<
HEAD
ws
->
mylog
=
mylog
;
ws
->
setRespondFormat
(
fmt
);
for
(
const
auto
&
i
:
idlist
.
getList
()
)
{
mylog3
<<
myname
<<
": add "
<<
i
<<
endl
;
UWebSocket
::
sinfo
si
;
si
.
id
=
i
;
si
.
cmd
=
"ask"
;
ws
->
add
(
si
);
=======
ws
->
setMaxCmdCount
(
wsMaxCmd
);
ws
->
mylog
=
mylog
;
...
...
@@ -782,7 +576,6 @@ std::shared_ptr<UWebSocketGate::UWebSocket> UWebSocketGate::newWebSocket( Poco::
{
mylog3
<<
myname
<<
": ask sid="
<<
i
<<
endl
;
ws
->
ask
(
i
);
>>>>>>>
2.9.4
-
alt0
.1
}
wsocks
.
emplace_back
(
ws
);
...
...
@@ -809,11 +602,7 @@ void UWebSocketGate::delWebSocket(std::shared_ptr<UWebSocket>& ws )
}
}
// -----------------------------------------------------------------------------
<<<<<<<
HEAD
const
std
::
string
UWebSocketGate
::
UWebSocket
::
ping_str
=
{
"."
};
=======
const
std
::
string
UWebSocketGate
::
UWebSocket
::
ping_str
=
{
"{
\"
data
\"
: [{
\"
type
\"
:
\"
Ping
\"
}]}"
};
>>>>>>>
2.9.4
-
alt0
.1
UWebSocketGate
::
UWebSocket
::
UWebSocket
(
Poco
::
Net
::
HTTPServerRequest
*
_req
,
Poco
::
Net
::
HTTPServerResponse
*
_resp
)
:
...
...
@@ -874,12 +663,6 @@ void UWebSocketGate::UWebSocket::send( ev::timer& t, int revents )
if
(
EV_ERROR
&
revents
)
return
;
<<<<<<<
HEAD
for
(
size_t
i
=
0
;
!
wbuf
.
empty
()
&&
i
<
maxsend
&&
!
cancelled
;
i
++
)
write
();
// read(iorecv,revents);
=======
if
(
!
jbuf
.
empty
()
)
{
// сперва формируем очередной пакет(поток байт) из накопившихся данных для отправки
...
...
@@ -914,7 +697,6 @@ void UWebSocketGate::UWebSocket::send( ev::timer& t, int revents )
{
write
();
}
>>>>>>>
2.9.4
-
alt0
.1
}
// -----------------------------------------------------------------------------
void
UWebSocketGate
::
UWebSocket
::
ping
(
ev
::
timer
&
t
,
int
revents
)
...
...
@@ -1005,46 +787,24 @@ void UWebSocketGate::UWebSocket::read( ev::io& io, int revents )
}
}
// -----------------------------------------------------------------------------
<<<<<<<
HEAD
void
UWebSocketGate
::
UWebSocket
::
add
(
const
sinfo
&
si
)
{
smap
[
si
.
id
]
=
si
;
=======
void
UWebSocketGate
::
UWebSocket
::
ask
(
uniset
::
ObjectId
id
)
{
sinfo
s
;
s
.
id
=
id
;
s
.
cmd
=
"ask"
;
qcmd
.
push
(
s
);
>>>>>>>
2.9.4
-
alt0
.1
}
// -----------------------------------------------------------------------------
void
UWebSocketGate
::
UWebSocket
::
del
(
uniset
::
ObjectId
id
)
{
<<<<<<<
HEAD
auto
s
=
smap
.
find
(
id
);
if
(
s
!=
smap
.
end
()
)
s
->
second
.
cmd
=
"del"
;
=======
sinfo
s
;
s
.
id
=
id
;
s
.
cmd
=
"del"
;
qcmd
.
push
(
s
);
>>>>>>>
2.9.4
-
alt0
.1
}
// -----------------------------------------------------------------------------
void
UWebSocketGate
::
UWebSocket
::
set
(
uniset
::
ObjectId
id
,
long
value
)
{
<<<<<<<
HEAD
auto
s
=
smap
.
find
(
id
);
if
(
s
!=
smap
.
end
()
)
{
s
->
second
.
value
=
value
;
s
->
second
.
cmd
=
"set"
;
}
=======
sinfo
s
;
s
.
id
=
id
;
s
.
value
=
value
;
...
...
@@ -1058,7 +818,6 @@ void UWebSocketGate::UWebSocket::get( uniset::ObjectId id )
s
.
id
=
id
;
s
.
cmd
=
"get"
;
qcmd
.
push
(
s
);
>>>>>>>
2.9.4
-
alt0
.1
}
// -----------------------------------------------------------------------------
void
UWebSocketGate
::
UWebSocket
::
sensorInfo
(
const
uniset
::
SensorMessage
*
sm
)
...
...
@@ -1071,21 +830,13 @@ void UWebSocketGate::UWebSocket::sensorInfo( const uniset::SensorMessage* sm )
if
(
s
==
smap
.
end
()
)
return
;
<<<<<<<
HEAD
if
(
wbuf
.
size
()
>
maxsize
)
=======
if
(
jbuf
.
size
()
>
maxsize
)
>>>>>>>
2.9.4
-
alt0
.1
{
mywarn
<<
req
->
clientAddress
().
toString
()
<<
" lost messages..."
<<
endl
;
return
;
}
<<<<<<<
HEAD
wbuf
.
emplace
(
UWebSocketGate
::
format
(
sm
,
s
->
second
.
err
,
fmt
));
=======
jbuf
.
emplace
(
UWebSocketGate
::
to_json
(
sm
,
s
->
second
.
err
));
>>>>>>>
2.9.4
-
alt0
.1
if
(
ioping
.
is_active
()
)
ioping
.
stop
();
...
...
@@ -1093,30 +844,16 @@ void UWebSocketGate::UWebSocket::sensorInfo( const uniset::SensorMessage* sm )
// -----------------------------------------------------------------------------
void
UWebSocketGate
::
UWebSocket
::
doCommand
(
const
std
::
shared_ptr
<
UInterface
>&
ui
)
{
<<<<<<<
HEAD
for
(
auto
&&
io
:
smap
)
{
auto
&
s
=
io
.
second
;
=======
for
(
size_t
i
=
0
;
i
<
maxcmd
&&
!
qcmd
.
empty
();
i
++
)
{
auto
s
=
qcmd
.
front
();
qcmd
.
pop
();
>>>>>>>
2.9.4
-
alt0
.1
try
{
if
(
s
.
cmd
==
""
)
continue
;
<<<<<<<
HEAD
if
(
s
.
cmd
==
"ask"
)
ui
->
askSensor
(
s
.
id
,
UniversalIO
::
UIONotify
);
else
if
(
s
.
cmd
==
"del"
)
ui
->
askSensor
(
s
.
id
,
UniversalIO
::
UIODontNotify
);
else
if
(
s
.
cmd
==
"set"
)
ui
->
setValue
(
s
.
id
,
s
.
value
);
=======
mylog3
<<
req
->
clientAddress
().
toString
()
<<
"(doCommand): "
<<
s
.
cmd
<<
" sid="
<<
s
.
id
<<
" value="
<<
s
.
value
...
...
@@ -1145,7 +882,6 @@ void UWebSocketGate::UWebSocket::doCommand( const std::shared_ptr<UInterface>& u
s
.
err
=
""
;
sendShortResponse
(
s
);
}
>>>>>>>
2.9.4
-
alt0
.1
s
.
err
=
""
;
s
.
cmd
=
""
;
...
...
@@ -1153,24 +889,12 @@ void UWebSocketGate::UWebSocket::doCommand( const std::shared_ptr<UInterface>& u
catch
(
std
::
exception
&
ex
)
{
mycrit
<<
"(UWebSocket::doCommand): "
<<
ex
.
what
()
<<
endl
;
<<<<<<<
HEAD
sendError
(
s
,
ex
.
what
());
=======
s
.
err
=
ex
.
what
();
sendResponse
(
s
);
>>>>>>>
2.9.4
-
alt0
.1
}
}
}
// -----------------------------------------------------------------------------
<<<<<<<
HEAD
void
UWebSocketGate
::
UWebSocket
::
sendError
(
sinfo
&
si
,
const
std
::
string
&
err
)
{
uniset
::
SensorMessage
sm
(
si
.
id
,
0
);
// sm.undefined = true;
si
.
err
=
err
;
sensorInfo
(
&
sm
);
=======
void
UWebSocketGate
::
UWebSocket
::
sendShortResponse
(
sinfo
&
si
)
{
if
(
jbuf
.
size
()
>
maxsize
)
...
...
@@ -1199,7 +923,6 @@ void UWebSocketGate::UWebSocket::sendResponse( sinfo& si )
if
(
ioping
.
is_active
()
)
ioping
.
stop
();
>>>>>>>
2.9.4
-
alt0
.1
}
// -----------------------------------------------------------------------------
void
UWebSocketGate
::
UWebSocket
::
onCommand
(
const
string
&
cmdtxt
)
...
...
@@ -1220,10 +943,7 @@ void UWebSocketGate::UWebSocket::onCommand( const string& cmdtxt )
for
(
const
auto
&
i
:
idlist
)
set
(
i
.
si
.
id
,
i
.
val
);
<<<<<<<
HEAD
=======
// уведомление о новой команде
>>>>>>>
2.9.4
-
alt0
.1
cmdsignal
->
send
();
}
else
if
(
cmd
==
"ask"
)
...
...
@@ -1234,20 +954,9 @@ void UWebSocketGate::UWebSocket::onCommand( const string& cmdtxt )
auto
idlist
=
uniset
::
explode
(
params
);
for
(
const
auto
&
id
:
idlist
.
getList
()
)
<<<<<<<
HEAD
{
sinfo
s
;
s
.
id
=
id
;
s
.
cmd
=
"ask"
;
add
(
s
);
}
// даём команду на перезаказ датчиков
=======
ask
(
id
);
// уведомление о новой команде
>>>>>>>
2.9.4
-
alt0
.1
cmdsignal
->
send
();
}
else
if
(
cmd
==
"del"
)
...
...
@@ -1260,9 +969,6 @@ void UWebSocketGate::UWebSocket::onCommand( const string& cmdtxt )
for
(
const
auto
&
id
:
idlist
.
getList
()
)
del
(
id
);
<<<<<<<
HEAD
// даём команду на перезаказ датчиков
=======
// уведомление о новой команде
cmdsignal
->
send
();
}
...
...
@@ -1277,7 +983,6 @@ void UWebSocketGate::UWebSocket::onCommand( const string& cmdtxt )
get
(
id
);
// уведомление о новой команде
>>>>>>>
2.9.4
-
alt0
.1
cmdsignal
->
send
();
}
}
...
...
@@ -1306,11 +1011,7 @@ void UWebSocketGate::UWebSocket::write()
int
flags
=
WebSocket
::
FRAME_TEXT
;
<<<<<<<
HEAD
if
(
msg
->
len
==
1
)
// это пинг состоящий из "."
=======
if
(
msg
->
len
==
ping_str
.
size
()
)
>>>>>>>
2.9.4
-
alt0
.1
flags
=
WebSocket
::
FRAME_FLAG_FIN
|
WebSocket
::
FRAME_OP_PING
;
try
...
...
@@ -1429,16 +1130,10 @@ void UWebSocketGate::UWebSocket::setMaxSendCount( size_t val )
maxsend
=
val
;
}
// -----------------------------------------------------------------------------
<<<<<<<
HEAD
void
UWebSocketGate
::
UWebSocket
::
setRespondFormat
(
UWebSocketGate
::
RespondFormat
f
)
{
fmt
=
f
;
=======
void
UWebSocketGate
::
UWebSocket
::
setMaxCmdCount
(
size_t
val
)
{
if
(
val
>
0
)
maxcmd
=
val
;
>>>>>>>
2.9.4
-
alt0
.1
}
// -----------------------------------------------------------------------------
void
UWebSocketGate
::
httpWebSocketPage
(
std
::
ostream
&
ostr
,
Poco
::
Net
::
HTTPServerRequest
&
req
,
Poco
::
Net
::
HTTPServerResponse
&
resp
)
...
...
@@ -1460,16 +1155,7 @@ void UWebSocketGate::httpWebSocketPage( std::ostream& ostr, Poco::Net::HTTPServe
ostr
<<
" <li><a target='_blank' href=
\"
http://"
<<
req
.
serverAddress
().
toString
()
<<<<<<<
HEAD
<<
"/wsgate/json
\"
>42,30,1042 [json]</a></li>"
<<
endl
;
ostr
<<
" <li><a target='_blank' href=
\"
http://"
<<
req
.
serverAddress
().
toString
()
<<
"/wsgate/txt
\"
>42,30,1042 [txt]</a></li>"
=======
<<
"/wsgate/?42,30,1042
\"
>42,30,1042</a></li>"
>>>>>>>
2.9.4
-
alt0
.1
<<
endl
;
ostr
<<
"</ul>"
<<
endl
;
...
...
@@ -1513,11 +1199,7 @@ void UWebSocketGate::httpWebSocketConnectPage( ostream& ostr,
ostr
<<
"{"
<<
endl
;
ostr
<<
" if (
\"
WebSocket
\"
in window)"
<<
endl
;
ostr
<<
" {"
<<
endl
;
<<<<<<<
HEAD
ostr
<<
" var ws = new WebSocket(
\"
ws://"
<<
req
.
serverAddress
().
toString
()
<<
"/wsgate/
\"
);"
<<
endl
;
=======
ostr
<<
" var ws = new WebSocket(
\"
ws://"
<<
req
.
serverAddress
().
toString
()
<<
"/wsgate/?"
<<
params
<<
"
\"
);"
<<
endl
;
>>>>>>>
2.9.4
-
alt0
.1
ostr
<<
"setInterval(send_cmd, 1000);"
<<
endl
;
ostr
<<
" var l = document.getElementById('logname');"
<<
endl
;
ostr
<<
" l.innerHTML = '*'"
<<
endl
;
...
...
@@ -1544,11 +1226,7 @@ void UWebSocketGate::httpWebSocketConnectPage( ostream& ostr,
ostr
<<
" }"
<<
endl
;
ostr
<<
"function send_cmd() {"
<<
endl
;
<<<<<<<
HEAD
ostr
<<
" ws.send( 'set:12,32,34' );"
<<
endl
;
=======
// ostr << " ws.send( 'set:12,32,34' );" << endl;
>>>>>>>
2.9.4
-
alt0
.1
ostr
<<
"}"
<<
endl
;
ostr
<<
"}"
<<
endl
;
...
...
extensions/UWebSocketGate/UWebSocketGate.h
View file @
eceea3c3
...
...
@@ -55,21 +55,13 @@ namespace uniset
об изменнии датчиков, а так же изменять состояние (см. \ref sec_UWebSocketGate_Command).
Подключение к websocket-у доступно по адресу:
\code
<<<<<<< HEAD
ws://host:port/wsgate/?s1,s2,s3,s4&format=[json,txt,raw]
=======
ws://host:port/wsgate/
>>>>>>> 2.9.4-alt0.1
\endcode
Помимо этого UWebSocketGate работает в режиме мониторинга изменений датчиков.
Для этого достаточно зайти на страничку по адресу:
\code
<<<<<<< HEAD
http://host:port/wsgate/?s1,s2,s3,s4&format=[json,txt,raw]
=======
http://host:port/wsgate/?s1,s2,s3,s4
>>>>>>> 2.9.4-alt0.1
\endcode
\section sec_UWebSocketGate_Conf Конфигурирование UWebSocketGate
...
...
@@ -83,9 +75,6 @@ namespace uniset
\section sec_UWebSocketGate_DETAIL UWebSocketGate: Технические детали
Вся релизация построена на "однопоточном" eventloop. Если датчики долго не меняются, то периодически посылается "ping" сообщение.
<<<<<<< HEAD
\section sec_UWebSocketGate_Command Команды
=======
\section sec_UWebSocketGate_Messages Сообщения
Общий формат сообщений
\code
...
...
@@ -169,7 +158,6 @@ namespace uniset
--prefix-ws-heartbeat-time msec
\section sec_UWebSocketGate_Command Команды
>>>>>>> 2.9.4-alt0.1
Через websocket можно посылать команды.
На текущий момент формат команды строковый.
Т.е. для подачи команды, необходимо послать просто строку.
...
...
@@ -178,13 +166,7 @@ namespace uniset
- "set:id1=val1,id2=val2,name3=val4,..." - выставить значение датчиков
- "ask:id1,id2,name3,..." - подписаться на уведомления об изменении датчиков (sensorInfo)
- "del:id1,id2,name3,..." - отказаться от уведомления об изменении датчиков
<<<<<<< HEAD
\todo Разобраться с "ping" сообщением для формата json..
\todo Настройка check_sec из командной строки и configure.xml
=======
- "get:id1,id2,name3,..." - получить текущее значение датчиков (разовое сообщение ShortSensorInfo)
>>>>>>> 2.9.4-alt0.1
*/
class
UWebSocketGate
:
public
UniSetObject
,
...
...
@@ -247,12 +229,8 @@ namespace uniset
void
checkMessages
(
ev
::
timer
&
t
,
int
revents
);
virtual
void
sensorInfo
(
const
uniset
::
SensorMessage
*
sm
)
override
;
ev
::
timer
iocheck
;
<<<<<<<
HEAD
double
check_sec
=
{
0
.
3
};
=======
double
check_sec
=
{
0
.
05
};
int
maxMessagesProcessing
=
{
100
};
>>>>>>>
2
.
9
.
4
-
alt0
.
1
std
::
shared_ptr
<
DebugStream
>
mylog
;
...
...
@@ -265,27 +243,9 @@ namespace uniset
double
wsHeartbeatTime_sec
=
{
3
.
0
};
double
wsSendTime_sec
=
{
0
.
5
};
size_t
wsMaxSend
=
{
200
};
<<<<<<<
HEAD
enum
class
RespondFormat
{
UNKNOWN
,
JSON
,
TXT
,
RAW
};
RespondFormat
from_string
(
const
std
::
string
&
str
);
static
UTCPCore
::
Buffer
*
format
(
const
uniset
::
SensorMessage
*
sm
,
const
std
::
string
&
err
,
const
RespondFormat
fmt
);
static
UTCPCore
::
Buffer
*
to_json
(
const
uniset
::
SensorMessage
*
sm
,
const
std
::
string
&
err
);
static
UTCPCore
::
Buffer
*
to_txt
(
const
uniset
::
SensorMessage
*
sm
,
const
std
::
string
&
err
);
static
UTCPCore
::
Buffer
*
to_raw
(
const
uniset
::
SensorMessage
*
sm
,
const
std
::
string
&
err
);
=======
size_t
wsMaxCmd
=
{
100
};
static
Poco
::
JSON
::
Object
::
Ptr
to_json
(
const
uniset
::
SensorMessage
*
sm
,
const
std
::
string
&
err
);
>>>>>>>
2
.
9
.
4
-
alt0
.
1
/*! класс реализует работу с websocket через eventloop
* Из-за того, что поступление логов может быть достаточно быстрым
...
...
@@ -318,13 +278,6 @@ namespace uniset
long
value
=
{
0
};
// set value
};
<<<<<<<
HEAD
void
add
(
const
sinfo
&
si
);
void
del
(
uniset
::
ObjectId
id
);
void
set
(
uniset
::
ObjectId
id
,
long
value
);
void
sensorInfo
(
const
uniset
::
SensorMessage
*
sm
);
void
doCommand
(
const
std
::
shared_ptr
<
UInterface
>&
ui
);
=======
void
ask
(
uniset
::
ObjectId
id
);
void
del
(
uniset
::
ObjectId
id
);
...
...
@@ -333,7 +286,6 @@ namespace uniset
void
sensorInfo
(
const
uniset
::
SensorMessage
*
sm
);
void
doCommand
(
const
std
::
shared_ptr
<
UInterface
>&
ui
);
static
Poco
::
JSON
::
Object
::
Ptr
to_short_json
(
sinfo
*
si
);
>>>>>>>
2
.
9
.
4
-
alt0
.
1
void
term
();
...
...
@@ -343,32 +295,21 @@ namespace uniset
void
setHearbeatTime
(
const
double
&
sec
);
void
setSendPeriod
(
const
double
&
sec
);
void
setMaxSendCount
(
size_t
val
);
<<<<<<<
HEAD
void
setRespondFormat
(
RespondFormat
f
);
=======
void
setMaxCmdCount
(
size_t
val
);
>>>>>>>
2
.
9
.
4
-
alt0
.
1
std
::
shared_ptr
<
DebugStream
>
mylog
;
protected
:
void
write
();
<<<<<<<
HEAD
void
sendError
(
sinfo
&
si
,
const
std
::
string
&
err
);
=======
void
sendResponse
(
sinfo
&
si
);
void
sendShortResponse
(
sinfo
&
si
);
>>>>>>>
2
.
9
.
4
-
alt0
.
1
void
onCommand
(
const
std
::
string
&
cmd
);
ev
::
timer
iosend
;
double
send_sec
=
{
0
.
5
};
size_t
maxsend
=
{
200
};
<<<<<<<
HEAD
=======
size_t
maxcmd
=
{
100
};
>>>>>>>
2
.
9
.
4
-
alt0
.
1
ev
::
timer
ioping
;
double
ping_sec
=
{
3
.
0
};
...
...
@@ -385,25 +326,16 @@ namespace uniset
std
::
atomic_bool
cancelled
=
{
false
};
std
::
unordered_map
<
uniset
::
ObjectId
,
sinfo
>
smap
;
<<<<<<<
HEAD
RespondFormat
fmt
=
{
RespondFormat
::
JSON
};
=======
std
::
queue
<
sinfo
>
qcmd
;
// очередь команд
>>>>>>>
2
.
9
.
4
-
alt0
.
1
Poco
::
Net
::
HTTPServerRequest
*
req
;
Poco
::
Net
::
HTTPServerResponse
*
resp
;
<<<<<<<
HEAD
// очередь данных на посылку..
std
::
queue
<
UTCPCore
::
Buffer
*>
wbuf
;
=======
// очередь json-на отправку
std
::
queue
<
Poco
::
JSON
::
Object
::
Ptr
>
jbuf
;
// очередь данных на посылку..
std
::
queue
<
uniset
::
UTCPCore
::
Buffer
*>
wbuf
;
>>>>>>>
2
.
9
.
4
-
alt0
.
1
size_t
maxsize
;
// рассчитывается сходя из max_send (см. конструктор)
};
...
...
uniset2.files
View file @
eceea3c3
...
...
@@ -297,8 +297,6 @@
./extensions/UniNetwork/uninet.cc
./extensions/UWebSocketGate/main.cc
./extensions/UWebSocketGate/Makefile.am
<<<<<<< HEAD
=======
./extensions/UWebSocketGate.old/main.cc
./extensions/UWebSocketGate.old/Makefile.am
./extensions/UWebSocketGate.old/UWebSocketGate.cc
...
...
@@ -307,7 +305,6 @@
./extensions/UWebSocketGate/tests/Makefile.am
./extensions/UWebSocketGate/tests/tests_with_sm.cc
./extensions/UWebSocketGate/tests/test_uwebsocketgate.cc
>>>>>>> 2.9.4-alt0.1
./extensions/UWebSocketGate/UWebSocketGate.cc
./extensions/UWebSocketGate/UWebSocketGate.h
./extensions/UWebSocketGate/UWebSocketGateSugar.h
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment