diff options
| author | Electric-Blue <Electric-Blue@users.noreply.github.com> | 2016-01-26 02:03:48 +0300 |
|---|---|---|
| committer | Electric-Blue <Electric-Blue@users.noreply.github.com> | 2016-01-26 02:03:48 +0300 |
| commit | 0c4a1cc1c2083a871562364de5df4f9d88ec321e (patch) | |
| tree | ddb8428845b663c078359eda4ec81bdcc157414f /examples | |
| parent | 27a7a2a18a6db8b67cbe0e86c37cb174de2a1295 (diff) | |
| download | NimBluez-0c4a1cc1c2083a871562364de5df4f9d88ec321e.tar.gz NimBluez-0c4a1cc1c2083a871562364de5df4f9d88ec321e.zip | |
First version.
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/discovery.nim | 21 | ||||
| -rw-r--r-- | examples/nativesocketsclient.nim | 44 | ||||
| -rw-r--r-- | examples/nativesocketsserver.nim | 81 |
3 files changed, 146 insertions, 0 deletions
diff --git a/examples/discovery.nim b/examples/discovery.nim new file mode 100644 index 0000000..debe0a2 --- /dev/null +++ b/examples/discovery.nim @@ -0,0 +1,21 @@ +# Copyright (c) 2016, Maxim V. Abramov +# All rights reserved. +# Look at license.txt for more info. + +## Simple Bluetooth local and remote devices discovery implementation. + +import strutils +import ../nimbluez/bluetooth + +echo "Local devices:" +for localDevice in getLocalDevices(): + echo "$1 - $2" % [localDevice.address, localDevice.name] + + echo " Remote devices:" + for remoteDevice in localDevice.getRemoteDevices(): + echo " $1 - $2" % [remoteDevice.address, remoteDevice.name] + +echo "" +echo "All remote devices:" +for remoteDevice in getRemoteDevices(): + echo "$1 - $2" % [remoteDevice.address, remoteDevice.name] diff --git a/examples/nativesocketsclient.nim b/examples/nativesocketsclient.nim new file mode 100644 index 0000000..80ef026 --- /dev/null +++ b/examples/nativesocketsclient.nim @@ -0,0 +1,44 @@ +import os +import ../nimbluez/bluetoothnativesockets + +let + serverPort = RfcommPort(15) + serverAddress = + "provide_your_server_address_string_here" + # "00:02:72:0F:5C:87" + # "AC:7B:A1:55:E6:4A" + +var clientSocket = newBluetoothNativeSocket(SOCK_STREAM, BTPROTO_RFCOMM) +if clientSocket == InvalidSocket: + raiseOSError(osLastError()) +try: + echo "Client socket created: ", repr(clientSocket) + + var name = getRfcommAddr(serverPort, serverAddress) + if connect(clientSocket, + cast[ptr SockAddr](addr(name)), + sizeof(name).SockLen) < 0'i32: + raiseOSError(osLastError()) + echo "Connection established." + + var message = "What time you got?" + + echo "Sending message:" + echo " ", message + let sentLen = clientSocket.send(cstring(message), cint(message.len), cint(0)) + if sentLen < 0'i32: + raiseOSError(osLastError()) + echo "Characters sent: ", sentLen + + echo "Receiving message:" + message = "" + message.setLen(1000) + let recvLen = recv(clientSocket, cstring(message), cint(message.len), cint(0)) + if recvLen < 0'i32: + raiseOSError(osLastError()) + message.setLen(recvLen) + echo " ", message + echo "Characters received: ", recvLen +finally: + clientSocket.close() + echo "Client socket closed." diff --git a/examples/nativesocketsserver.nim b/examples/nativesocketsserver.nim new file mode 100644 index 0000000..71ed56e --- /dev/null +++ b/examples/nativesocketsserver.nim @@ -0,0 +1,81 @@ +# Copyright (c) 2016, Maxim V. Abramov +# All rights reserved. +# Look at license.txt for more info. + +## Simple Bluetooth server implementation based on sockets and RFCOMM protocol. + +import os +import ../nimbluez/bluetoothnativesockets + +var + serverPort = RfcommPort(15) + serverAddress = + "" + # "00:02:72:0F:5C:87" + # "AC:7B:A1:55:E6:4A" + +var serverSocket = newBluetoothNativeSocket(SOCK_STREAM, BTPROTO_RFCOMM) +if serverSocket == InvalidSocket: + raiseOSError(osLastError()) +try: + var name = getRfcommAddr(serverPort, serverAddress) + if bindAddr(serverSocket, + cast[ptr SockAddr](addr(name)), + sizeof(name).SockLen) < 0'i32: + raiseOSError(osLastError()) + if serverSocket.listen() < 0'i32: + raiseOSError(osLastError()) + echo "Server socket created: ", repr(serverSocket) + (serverAddress, serverPort) = serverSocket.getRfcommLocalAddr() + echo "Address: ", serverAddress, ", port: ", serverPort + + while true: + echo "Waiting for incoming connections..." + var + sockAddr = getRfcommAddr() + addrLen = sizeof(sockAddr).SockLen + var clientSocket = accept(serverSocket, + cast[ptr SockAddr](addr(sockAddr)), + addr(addrLen)) + if clientSocket == InvalidSocket: + raiseOSError(osLastError()) + try: + var + clientAddress: string + clientPort: RfcommPort + (clientAddress, clientPort) = clientSocket.getRfcommPeerAddr() + echo "Connection from ", clientAddress, " on port: ", clientPort + echo "Client socket: ", repr(clientSocket) + + var message = "" + message.setLen(1000) + while true: + echo "Receiving message:" + let recvLen = clientSocket.recv(cstring(message), + cint(message.len), + cint(0)) + if recvLen < 0'i32: + message.setLen(0) + echo osErrorMsg(osLastError()) + break + message.setLen(recvLen) + if recvLen == 0'i32: + break + echo " ", message + echo "Characters received: ", recvLen + + message = "Seven twenty-two in the A.M." + echo "Sending message:" + echo " ", message + let sentLen = clientSocket.send(cstring(message), + cint(message.len), + cint(0)) + if sentLen < 0'i32: + raiseOSError(osLastError()) + echo "Characters sent: ", sentLen + finally: + clientSocket.close() + echo "Client socket closed." +finally: + serverSocket.close() + echo "Server socket closed." |
