tamashii-client 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a57eb1ba451079455f62b8ddf5ae3dc426f8070d
4
- data.tar.gz: 459efd6811a65e156a0edc476cd0262d6fccd886
3
+ metadata.gz: 616b8acc7d50fcb48f9b8e3cd333fd664e41e9cb
4
+ data.tar.gz: 0c4529a5ee7eee3844f6cad3d05052d01b656526
5
5
  SHA512:
6
- metadata.gz: b5f9a314e6d792de8a9a934a9ce5448bc1220e819b5f03123562c6fdf556f3d4d7cc2b8bb16d54b6d61e87769b860936efd803af16a92dee02cd052a4b9149b3
7
- data.tar.gz: ed7b1cb8340d8494b5fe4e8d9fadfe6607ff767849d08b0db600cc271d9cd0adcc2d3432442d0a3ecd48af88ed35ebd3de65805d88f13a2785c9890d2abc4134
6
+ metadata.gz: 3e329f34d53186908f64c96143acc0ba3dcd7d657f8d85957a204bdc9c12b1cf8638a3b8611409f5fb99a16d845e22c2dbfdcaf3b0b4e8f0118bf2531700fc60
7
+ data.tar.gz: 11f3285f16c6d6634603cc1b82b8ebd60ebd9ee61e3e71ce60c1e62be832eb06f7353086a9937944763e9187eb6ca7f926d5560c453393dbbc2a95f0a839a0a8
data/README.md CHANGED
@@ -1 +1,181 @@
1
- # Tamashii::Client
1
+ ---
2
+ tags: tamashii, readme
3
+ ---
4
+
5
+ Tamashii Client [![Gem Version](https://badge.fury.io/rb/tamashii-client.svg)](https://badge.fury.io/rb/tamashii-client)
6
+ ===
7
+
8
+ Tamashii Client is the client side of the WebSocket framework [Tamashii](https://github.com/tamashii-io/tamashii). It is event-driven and it provides high-level API for users to communicates with WebSocket server easily.
9
+
10
+ ## Installation
11
+
12
+ Add the following code to your `Gemfile`
13
+
14
+ And then execute:
15
+ ```ruby
16
+ $ bundle install
17
+ ```
18
+
19
+ Or install it yourself with:
20
+ ```ruby
21
+ $ gem install tamashii-client
22
+ ```
23
+
24
+ ## Usage
25
+
26
+ With Tamashii Client, we just need to focus on how to handle the events such as `on_connect` for connection opened or `on_message` for receiving messages from server.
27
+
28
+ ### Simple Example
29
+
30
+ A simple example of using Tamashii Client follows. Here we will connect to the [wss://echo.websocket.org](wss://echo.websocket.org), the echo testing for WebSocket.
31
+
32
+ ```ruby
33
+ require 'tamashii/client'
34
+
35
+ # configuration for client. Can be seperated into other file
36
+ Tamashii::Client.config do
37
+ # whether to use TLS or not. Here we connect to 'wss', so the value is true
38
+ use_ssl true
39
+ # the hostname WITHOUT url scheme
40
+ host "echo.websocket.org"
41
+ # the port to connect with. 443 for HTTPS and WSS
42
+ # Note the current version client does not infer the port from 'use_ssl'
43
+ # So you must explictly specifiy the port to use
44
+ port 443
45
+ # the log file for internel connection log
46
+ # default is STDOUT
47
+ log_file 'tamashii.log'
48
+ end
49
+
50
+ client = Tamashii::Client::Base.new
51
+ @server_opened = false
52
+
53
+ # callback for server opened
54
+ # called when the WebSocket connection is readt
55
+ client.on(:open) do
56
+ @server_opened = true
57
+ end
58
+ # callback for receving messages
59
+ # The data received is represented in a byte array
60
+ # You may need to 'pack' it back to Ruby string
61
+ client.on(:message) do |message|
62
+ puts "Received: #{message.pack('C*')}"
63
+ end
64
+
65
+
66
+ # sending loop
67
+ # We send a request to server every second and terminates after 10 seconds
68
+ # In the begining, the server is not opened so the sending may fail.
69
+ count = 0
70
+ loop do
71
+ sleep 1
72
+ if @server_opened # can also use 'client.opened?'
73
+ client.transmit "Hello World! #{count}"
74
+ else
75
+ puts "Unable to send #{count}: server not opened"
76
+ end
77
+ count += 1
78
+ if count >= 10
79
+ client.close
80
+ break
81
+ end
82
+ end
83
+ ```
84
+
85
+ The [wss://echo.websocket.org](wss://echo.websocket.org) will echo the messages back to the client. So if everything works fine, you will see following output:
86
+
87
+ ```text
88
+ Unable to send 0: server not opened
89
+ Received: Hello World! 1
90
+ Received: Hello World! 2
91
+ Received: Hello World! 3
92
+ Received: Hello World! 4
93
+ Received: Hello World! 5
94
+ Received: Hello World! 6
95
+ Received: Hello World! 7
96
+ Received: Hello World! 8
97
+ Received: Hello World! 9
98
+ ```
99
+
100
+ If you look into the log file (`tamashii.log` in this example), you can find the connection details of Tamashii Client.
101
+
102
+ ```log
103
+ [2017-09-08 03:39:38] INFO -- WebSocket Client : Worker Create!
104
+ [2017-09-08 03:39:39] INFO -- WebSocket Client : Trying to open the socket...
105
+ [2017-09-08 03:39:40] INFO -- WebSocket Client : Socket opened!
106
+ [2017-09-08 03:39:40] INFO -- WebSocket Client : WebSocket Server opened
107
+ [2017-09-08 03:39:41] DEBUG -- WebSocket Client : Message from server: [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 32, 49]
108
+ [2017-09-08 03:39:41] DEBUG -- WebSocket Client : Message from server: [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 32, 50]
109
+ [2017-09-08 03:39:42] DEBUG -- WebSocket Client : Message from server: [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 32, 51]
110
+ [2017-09-08 03:39:43] DEBUG -- WebSocket Client : Message from server: [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 32, 52]
111
+ [2017-09-08 03:39:44] DEBUG -- WebSocket Client : Message from server: [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 32, 53]
112
+ [2017-09-08 03:39:45] DEBUG -- WebSocket Client : Message from server: [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 32, 54]
113
+ [2017-09-08 03:39:46] DEBUG -- WebSocket Client : Message from server: [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 32, 55]
114
+ [2017-09-08 03:39:47] DEBUG -- WebSocket Client : Message from server: [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 32, 56]
115
+ [2017-09-08 03:39:48] DEBUG -- WebSocket Client : Message from server: [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 32, 57]
116
+ [2017-09-08 03:39:49] INFO -- WebSocket Client : WebSocket Server closed
117
+ [2017-09-08 03:39:49] INFO -- WebSocket Client : Socket closed
118
+ [2017-09-08 03:39:49] DEBUG -- WebSocket Client : Worker terminales normally
119
+ ```
120
+
121
+ The log level can be changed in the configuration using `log_level`. For example, to change to level to `INFO`:
122
+ ```ruby
123
+ Tamashii::Client.config do
124
+ log_level :INFO
125
+ end
126
+ ```
127
+
128
+ ### The events and callbacks
129
+
130
+ These are events in the Tamashii Client. You can use `on` method to register callbacks for them.
131
+ - `socket_opened`
132
+ - When the low-level io socket (`TCPSocket` or `OpenSSL::SSL::SSLSocket`) successfully connected to the server.
133
+ - Receving this event does not imply the server supports WebSocket.
134
+ - `open`
135
+ - When the WebSocket handshake is finished and the connection is opened
136
+ - Client can start sending data to server after receiving this event.
137
+ - `message`
138
+ - When the client receives the WebSocket payload from server.
139
+ - The message payload will be pass as the argument of the callback.
140
+ - `error`
141
+ - When there is a protocol error due to bad data sent by the other peer.
142
+ - This event is purely informational, you do not need to implement error recovery.
143
+ - The error object will be pass as the argument of the callback.
144
+ - `close`
145
+ - When the WebSocket is closed **normally**.
146
+ - Will **NOT** be fired when the connection is closed by low-level IO error such as connection reset.
147
+ - `socket_closed`
148
+ - When the low-level socket is closed.
149
+ - Will be fired no matter the WebSocket is closed normally or not.
150
+
151
+
152
+
153
+ ### Cooperate with Tamashii Server
154
+
155
+ Above example using the [wss://echo.websocket.org](wss://echo.websocket.org) to test your client. You can also use the [Tamashii](https://github.com/tamashii-io/tamashii) server to test your client. Only thing to do is to change the `host` and `port` in the configuration into the one used by your Tamashii server.
156
+
157
+ ## Development
158
+
159
+ To get the source code
160
+
161
+ $ git clone git@github.com:tamashii-io/tamashii-client.git
162
+
163
+ Initialize the development environment
164
+
165
+ $ ./bin/setup
166
+
167
+ Run the spec
168
+
169
+ $ rspec
170
+
171
+ Installation the version of development on localhost
172
+
173
+ $ bundle exec rake install
174
+
175
+ ## Contribution
176
+
177
+ Please report to us on [Github](https://github.com/tamashii-io/tamashii-client) if there is any bug or suggested modified.
178
+
179
+ The project was developed by [5xruby Inc.](https://5xruby.tw/)
180
+
181
+
@@ -20,7 +20,8 @@ module Tamashii
20
20
  end
21
21
 
22
22
  def initialize
23
- @url = "#{Config.use_ssl ? "wss" : "ws"}://#{Config.host}:#{Config.port}/#{Config.entry_point}"
23
+ entry_point_with_slash = Config.entry_point.start_with?("/") ? Config.entry_point : "/#{Config.entry_point}"
24
+ @url = "#{Config.use_ssl ? "wss" : "ws"}://#{Config.host}:#{Config.port}#{entry_point_with_slash}"
24
25
 
25
26
  @callbacks = {}
26
27
 
@@ -5,12 +5,12 @@ module Tamashii
5
5
  register :log_file, STDOUT
6
6
 
7
7
  register :use_ssl, false
8
- register :entry_point, "/tamashii"
8
+ register :entry_point, ""
9
9
  register :host, "localhost"
10
10
  register :port, 3000
11
- register :opening_timeout, 5
11
+ register :opening_timeout, 10
12
12
  register :opening_retry_interval, 1
13
- register :closing_timeout, 5
13
+ register :closing_timeout, 10
14
14
 
15
15
  def log_level(level = nil)
16
16
  return Client.logger.level if level.nil?
@@ -1,5 +1,5 @@
1
1
  module Tamashii
2
2
  module Client
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tamashii-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - 蒼時弦也
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2017-09-06 00:00:00.000000000 Z
13
+ date: 2017-09-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: websocket-driver