wands 0.5.0 → 0.6.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
  SHA256:
3
- metadata.gz: 3403821f90578ef0bf17cbfd5be39249ae53d60cc707e6f8789ef5dafb1cf38e
4
- data.tar.gz: 55bfa363521fc1fd724f692ac1301f21433a609be53cd341bfa61f65ca820dad
3
+ metadata.gz: 18151ffd726f30f61580fb224e066f7dbb8b1e600783be87f223492a13c691a0
4
+ data.tar.gz: e3a43d2c8c1003f8e3486964f6d7313d3bb315df90980ffb7f0444d0c1a2d2a1
5
5
  SHA512:
6
- metadata.gz: 1e71c0ce9e3b1b0c60cec11dd0ed0b4a00760ab107cf02c93f1662b78438280e5e6dc93aa2d1d7f27ea966d73598287f791b85d742a8b2b0142419425f9a171e
7
- data.tar.gz: 11abb373212ae3718f57e11236c14f714ce7ac9bef5dbf4d7db0c0f8a7e10a64e70ec6544cb034b585a9d5be8b36a722dc12de229f0d1c89a08d93cee158ec3b
6
+ metadata.gz: 8eab63ac1e6fe7dcdcb7457a387f05f14ff5308132d0963b761e409b4a10342d5532da7d63c0fd9d26135067b7a50b77e0ba5ee4af80d17950a076c2e742a2b9
7
+ data.tar.gz: 54466b3bf7bf8a5fd6a00c561bf3d879d8a3f7faaa8519bf2bf9c66d480252ca616090de8f40621173f6144836725b2c3fa386679f5b8c44f4cb532f680a23da
data/README.md CHANGED
@@ -24,19 +24,19 @@ gem install wands
24
24
  server = Wands::WebSocketServer.open('localhost', 2345)
25
25
 
26
26
  loop do
27
- client = server.accept
28
- client.write("Hello World!")
29
- client.close
27
+ socket = server.accept
28
+ socket.puts("Hello World!")
29
+ socket.close
30
30
  end
31
31
  ```
32
32
 
33
33
  ### Client
34
34
 
35
35
  ```ruby
36
- web_socket = Wands::WebSocket.open('localhost', 2345)
37
- web_socket.write("Hello World!")
38
- puts web_socket.gets
39
- web_socket.close
36
+ socket = Wands::WebSocket.open('localhost', 2345)
37
+ socket.puts("Hello World!")
38
+ puts socket.gets
39
+ socket.close
40
40
  ```
41
41
 
42
42
  ## Development
data/lib/wands/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Wands
4
- VERSION = "0.5.0"
4
+ VERSION = "0.6.1"
5
5
  end
@@ -46,7 +46,7 @@ module Wands
46
46
 
47
47
  def initialize(socket)
48
48
  @socket = socket
49
- @buffer = ""
49
+ @binary_message = "".b
50
50
  end
51
51
 
52
52
  def gets
@@ -63,14 +63,40 @@ module Wands
63
63
  end
64
64
  end
65
65
 
66
+ def puts(message)
67
+ frame = Protocol::WebSocket::TextFrame.new(true, message)
68
+ frame.write(@socket)
69
+ end
70
+
66
71
  def read(length)
67
- @buffer = gets if @buffer.empty?
68
- @buffer.slice!(0, length)
72
+ @binary_message = read_next_binary_frame if @binary_message.size.zero?
73
+
74
+ raise "not enough data." if @binary_message.size < length
75
+
76
+ data = @binary_message.byteslice(0, length)
77
+ @binary_message = @binary_message.byteslice(length, @binary_message.size - length)
78
+ data
69
79
  end
70
80
 
71
81
  def write(message)
72
- frame = Protocol::WebSocket::TextFrame.new(true, message)
82
+ frame = Protocol::WebSocket::BinaryFrame.new(true, message)
73
83
  frame.write(@socket)
74
84
  end
85
+
86
+ private
87
+
88
+ def read_next_binary_frame
89
+ framer = Protocol::WebSocket::Framer.new(@socket)
90
+ frame = framer.read_frame
91
+
92
+ case frame
93
+ when Protocol::WebSocket::BinaryFrame
94
+ frame.unpack
95
+ when Protocol::WebSocket::CloseFrame
96
+ Protocol::WebSocket::Message.new
97
+ else
98
+ raise "frame is not a binary"
99
+ end
100
+ end
75
101
  end
76
102
  end
data/sig/wands.rbs CHANGED
@@ -2,6 +2,7 @@ module Wands
2
2
  VERSION: String
3
3
 
4
4
  class WebSocket
5
+ @binary_message: String
5
6
  @socket: TCPSocket
6
7
 
7
8
  def initialize: (TCPSocket) -> void
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wands
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - shigeru.nakajima
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-03-02 00:00:00.000000000 Z
10
+ date: 2025-03-09 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: protocol-websocket
@@ -51,7 +51,6 @@ files:
51
51
  - ".idea/modules.xml"
52
52
  - ".idea/vcs.xml"
53
53
  - ".idea/wands.iml"
54
- - ".rubocop.yml"
55
54
  - LICENSE
56
55
  - README.md
57
56
  - Rakefile
data/.rubocop.yml DELETED
@@ -1,28 +0,0 @@
1
- AllCops:
2
- TargetRubyVersion: 3.1
3
- NewCops: enable
4
-
5
- Bundler/GemFilename:
6
- Exclude:
7
- - examples/**/*.rb
8
-
9
- Metrics/BlockLength:
10
- Exclude:
11
- - examples/**/*.rb
12
-
13
- Metrics/MethodLength:
14
- Max: 17
15
-
16
- Style/StringLiterals:
17
- EnforcedStyle: double_quotes
18
-
19
- Style/StringLiteralsInInterpolation:
20
- EnforcedStyle: double_quotes
21
-
22
- Layout/LineLength:
23
- Exclude:
24
- - wands.gemspec
25
-
26
- require:
27
- - rubocop-minitest
28
- - rubocop-rake