Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
opcua-asyncio
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Nikola Balog
opcua-asyncio
Commits
ef784eb4
Commit
ef784eb4
authored
Apr 30, 2015
by
Olivier R-D
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
replace server threads with asyncio
parent
bc2d628c
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
103 additions
and
2 deletions
+103
-2
opcua/binary_server_asyncio.py
opcua/binary_server_asyncio.py
+101
-0
opcua/server.py
opcua/server.py
+2
-2
No files found.
opcua/binary_server_asyncio.py
0 → 100644
View file @
ef784eb4
"""
Socket server forwarding request to internal server
"""
import
logging
import
functools
try
:
# we prefer to use bundles asyncio version, otherwise fallback to trollius
import
asyncio
except
ImportError
:
import
trollius
as
asyncio
from
trollius
import
From
from
opcua
import
ua
from
opcua.uaprocessor
import
UAProcessor
logger
=
logging
.
getLogger
(
__name__
)
class
BinaryServer
(
object
):
def
__init__
(
self
,
internal_server
,
hostname
,
port
):
self
.
logger
=
logging
.
getLogger
(
__name__
)
self
.
hostname
=
hostname
self
.
port
=
port
self
.
iserver
=
internal_server
self
.
loop
=
internal_server
.
loop
self
.
_server
=
None
def
start
(
self
):
class
OPCUAProtocol
(
asyncio
.
Protocol
):
"""
instanciated for every connection
defined as internal class since it needs access
to the internal server object
FIXME: find another solution
"""
iserver
=
self
.
iserver
loop
=
self
.
loop
def
connection_made
(
self
,
transport
):
self
.
peername
=
transport
.
get_extra_info
(
'peername'
)
print
(
'New connection from {}'
.
format
(
self
.
peername
))
self
.
transport
=
transport
self
.
processor
=
UAProcessor
(
self
.
iserver
,
self
.
transport
,
self
.
peername
)
self
.
data
=
b""
def
connection_lost
(
self
,
ex
):
print
(
'Lost connection from '
,
self
.
peername
,
ex
)
self
.
transport
.
close
()
def
data_received
(
self
,
data
):
logger
.
debug
(
"received %s bytes from socket"
,
len
(
data
))
if
self
.
data
:
data
=
self
.
data
+
data
self
.
data
=
b""
self
.
_process_data
(
data
)
def
_process_data
(
self
,
data
):
while
True
:
try
:
buf
=
ua
.
utils
.
Buffer
(
data
[:])
hdr
=
ua
.
Header
.
from_string
(
buf
)
if
len
(
buf
)
<
hdr
.
body_size
:
logger
.
warn
(
"We did not receive enough data from server, waiting for more"
)
self
.
data
=
data
return
ret
=
self
.
processor
.
process
(
hdr
,
buf
)
if
not
ret
:
logger
.
warn
(
"processor returned False, we close connection"
)
self
.
transport
.
close
()
return
if
len
(
data
)
<=
hdr
.
packet_size
:
return
data
=
data
[
hdr
.
packet_size
:]
except
utils
.
NotEnoughData
:
logger
.
warn
(
"Not a complete packet in data from client, waiting for more data"
)
self
.
data
=
buf
.
data
break
except
Exception
:
logger
.
exception
(
"Exception raised while parsing message from client, closing"
)
self
.
transport
.
close
()
break
logger
.
warning
(
"Listening on %s:%s"
,
self
.
hostname
,
self
.
port
)
coro
=
self
.
loop
.
create_server
(
OPCUAProtocol
,
self
.
hostname
,
self
.
port
)
self
.
_server
=
self
.
loop
.
run_coro_and_wait
(
coro
)
logger
.
warning
(
'Listening on %s'
,
self
.
_server
.
sockets
[
0
].
getsockname
())
def
stop
(
self
):
self
.
logger
.
warn
(
"Closing asyncio socket server"
)
self
.
_server
.
close
()
self
.
loop
.
run_coro_and_wait
(
self
.
_server
.
wait_closed
())
opcua/server.py
View file @
ef784eb4
...
...
@@ -10,8 +10,8 @@ except ImportError:
from
opcua
import
ua
from
opcua.binary_server
import
BinaryServer
#
from opcua.binary_server_asyncio import BinaryServer
#
from opcua.binary_server import BinaryServer
from
opcua.binary_server_asyncio
import
BinaryServer
from
opcua.internal_server
import
InternalServer
from
opcua
import
Node
,
Subscription
,
ObjectIds
,
Event
...
...
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