rakie 0.0.7 → 0.0.12

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
  SHA256:
3
- metadata.gz: d49cbaec5f721e084610be70c71ec27438c1fc45433eea9d54b9b72ac89f6b38
4
- data.tar.gz: 49466ddeb64dee351f28453c185f392a37aeb4129abc14430911cd9651ca739d
3
+ metadata.gz: 00b8c6d360d53843cc4a28aa5e80bb8f94f1e53998bf3b12a5046460cd44bbd0
4
+ data.tar.gz: 237700881bef3c7d7036c76ab206e54f46b48b795631d20241bfeeca8ed382a4
5
5
  SHA512:
6
- metadata.gz: 4e66c1558d9f29d382f6a6996241562eed1ea56710bc1b81dcdbec8063db4141d45f7c65a1f395199aadbd693807cd957606e61d8d2423175ba1f5e30711a36a
7
- data.tar.gz: 34e7343b3c0c1f63dedec91f0eef352d24fae53f025fb158080d4418f0d0ce526ce96de8dd2d9229e1ac7588f7d252669aa7f9d666446ac5559210e30e13aa01
6
+ metadata.gz: b485134bc665bfbccf116fe0978d6e7689cd334585c5d511f485dcbf2820c7cfd131e224c9b238024ea6e575ec76dffbde6aab9ea21bddfdd6a1a6cfb416a54d
7
+ data.tar.gz: 4a76980dc7f5229dc428facbb72ee8c719b4d6e815b2418135731f1d87658ccec4bef90e3989dfab2cbd5d1626689b9a96f793d2f394a1ef0c3e84c9267783ea
data/lib/rakie/channel.rb CHANGED
@@ -56,6 +56,7 @@ module Rakie
56
56
  while len > 0
57
57
  if len < task
58
58
  @write_task[0] = task - len
59
+ return
59
60
  end
60
61
 
61
62
  len -= task
@@ -65,6 +66,8 @@ module Rakie
65
66
  @delegate.on_send(self)
66
67
  Log.debug("Channel handle on_send")
67
68
  end
69
+
70
+ task = @write_task[0]
68
71
  end
69
72
  end
70
73
 
@@ -79,7 +82,7 @@ module Rakie
79
82
  @write_buffer = @write_buffer[len .. -1]
80
83
  end
81
84
 
82
- Log.debug("Channel write finished")
85
+ Log.debug("Channel write #{len} bytes finished")
83
86
 
84
87
  rescue IO::EAGAINWaitWritable
85
88
  self.handle_write(offset)
@@ -104,15 +107,20 @@ module Rakie
104
107
  end
105
108
 
106
109
  def on_detach(io)
110
+ if io.closed?
111
+ return
112
+ end
113
+
107
114
  begin
108
115
  io.close
109
116
 
110
- if @delegate
111
- @delegate.on_close(self)
112
- end
113
-
114
117
  rescue
115
118
  Log.debug("Channel is already closed")
119
+ return
120
+ end
121
+
122
+ if @delegate
123
+ @delegate.on_close(self)
116
124
  end
117
125
 
118
126
  Log.debug("Channel close ok")
@@ -141,6 +149,8 @@ module Rakie
141
149
  @write_buffer << data
142
150
  @write_task << data.length
143
151
 
152
+ Log.debug("write buffer append size: #{data.length}")
153
+
144
154
  Event.modify(@io, self, (Event::READ_EVENT | Event::WRITE_EVENT))
145
155
 
146
156
  return 0
data/lib/rakie/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Rakie
2
- VERSION = [0, 0, 7]
2
+ VERSION = [0, 0, 12]
3
3
 
4
4
  def self.version_s
5
5
  VERSION.join('.')
@@ -21,58 +21,78 @@ module Rakie
21
21
  @client_side = true
22
22
  end
23
23
 
24
+ # @param [String] data
24
25
  def on_recv(channel, data)
25
- # Log.debug("Rakie::HTTPServer recv: #{data}")
26
+ Log.debug("Rakie::Websocket recv len: #{data.length}")
26
27
 
27
- # @type [WebsocketMessage] request
28
- message = @recv_message
28
+ total_parsed = 0
29
29
 
30
- if message.parse_status == ParseStatus::COMPLETE
31
- message = WebsocketMessage.new
32
- @recv_message = message
33
- end
30
+ while data.length > 0
31
+ # @type [WebsocketMessage] request
32
+ message = @recv_message
34
33
 
35
- len = message.parse(data)
34
+ if message.parse_status == ParseStatus::COMPLETE
35
+ message = WebsocketMessage.new
36
+ @recv_message = message
37
+ end
36
38
 
37
- Log.debug("Rakie::Websocket receive message: #{message.to_s}")
39
+ len = message.parse(data)
40
+ total_parsed += len
38
41
 
39
- if message.parse_status == ParseStatus::COMPLETE
40
- response = WebsocketMessage.new
42
+ Log.debug("Rakie::Websocket receive message: #{message.payload} parse with #{len}")
41
43
 
42
- if message.op_code == WebsocketMessage::OP_PING
43
- response.fin = true
44
- response.op_code = WebsocketMessage::OP_PONG
45
- response.payload = "pong"
44
+ if message.parse_status == ParseStatus::COMPLETE
45
+ response = WebsocketMessage.new
46
46
 
47
- elsif message.op_code == WebsocketMessage::OP_PONG
48
- response.fin = true
49
- response.op_code = WebsocketMessage::OP_PING
50
- response.payload = "ping"
47
+ if message.op_code == WebsocketMessage::OP_PING
48
+ response.fin = true
49
+ response.op_code = WebsocketMessage::OP_PONG
50
+ response.payload = "Rakie::Websocket: op pong"
51
51
 
52
- elsif @delegate
53
- @delegate.on_message(self, message.payload)
54
- return len
52
+ elsif message.op_code == WebsocketMessage::OP_PONG
53
+ response.fin = true
54
+ response.op_code = WebsocketMessage::OP_PING
55
+ response.payload = "Rakie::Websocket: op ping"
55
56
 
56
- else
57
- response.fin = true
58
- response.op_code = WebsocketMessage::OP_TEXT
59
- response.payload = "Rakie!"
60
- end
61
-
62
- response_data = response.to_s
57
+ elsif message.op_code == WebsocketMessage::OP_CLOSE
58
+ channel.close
59
+
60
+ Log.debug("Rakie::Websocket: op close")
61
+ return 0
62
+
63
+ elsif @delegate
64
+ @delegate.on_message(self, message.payload)
65
+
66
+ else
67
+ response.fin = true
68
+ response.op_code = WebsocketMessage::OP_TEXT
69
+ response.payload = "Rakie!"
70
+ end
71
+
72
+ # response_data = response.to_s
63
73
 
64
- Log.debug("Rakie::Websocket response: #{response_data}")
74
+ # Log.debug("Rakie::Websocket response: #{response_data}")
65
75
 
66
- channel.write(response_data) # Response data
76
+ # channel.write(response_data) # Response data
67
77
 
68
- elsif message.parse_status == ParseStatus::ERROR
69
- channel.close
78
+ elsif message.parse_status == ParseStatus::CONTINUE
79
+ break
80
+
81
+ elsif message.parse_status == ParseStatus::ERROR
82
+ channel.close
83
+
84
+ Log.debug("Rakie::Websocket: Illegal message")
85
+ return 0
86
+ end
87
+
88
+ if len >= data.length
89
+ break
90
+ end
70
91
 
71
- Log.debug("Rakie::Websocket: Illegal message")
72
- return len
92
+ data = data[len .. -1]
73
93
  end
74
94
 
75
- return len
95
+ return total_parsed
76
96
  end
77
97
 
78
98
  def on_send(channel)
@@ -109,9 +129,9 @@ module Rakie
109
129
  end
110
130
 
111
131
  send_message = ws_message.to_s
112
- @send_messages << send_message
132
+ @send_messages << ws_message
113
133
 
114
- Log.debug("Rakie::Websocket send: #{send_message}")
134
+ Log.debug("Rakie::Websocket send: #{send_message} with #{send_message.length}")
115
135
 
116
136
  @channel.write(send_message) # Response data
117
137
  end
@@ -135,4 +155,4 @@ module Rakie
135
155
  @channel.write(send_message) # Response data
136
156
  end
137
157
  end
138
- end
158
+ end
@@ -5,7 +5,7 @@ module Rakie
5
5
  @delegate = delegate
6
6
 
7
7
  if http_server == nil
8
- http_server = HttpServer.new(host, port)
8
+ http_server = HttpServer.new(host: host, port: port)
9
9
  end
10
10
 
11
11
  @host = http_server.host
@@ -26,7 +26,6 @@ module Rakie
26
26
 
27
27
  if @delegate
28
28
  @delegate.on_connect(ws_client)
29
- return
30
29
  end
31
30
 
32
31
  @clients[channel] = ws_client
@@ -52,8 +51,10 @@ module Rakie
52
51
  client = @clients[channel]
53
52
 
54
53
  if client
55
- client.on_recv(channel, data)
54
+ return client.on_recv(channel, data)
56
55
  end
56
+
57
+ return data.length
57
58
  end
58
59
 
59
60
  def on_send(channel)
@@ -70,6 +71,8 @@ module Rakie
70
71
  if client
71
72
  client.on_close(channel)
72
73
  end
74
+
75
+ @clients.delete(channel)
73
76
  end
74
77
 
75
78
  def send(message, is_binary=false); end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rakie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jakit Liang
@@ -52,7 +52,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
52
52
  - !ruby/object:Gem::Version
53
53
  version: '0'
54
54
  requirements: []
55
- rubygems_version: 3.1.2
55
+ rubygems_version: 3.0.9
56
56
  signing_key:
57
57
  specification_version: 4
58
58
  summary: Rakie!