minep-request 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -14,6 +14,8 @@ test/version_tmp
14
14
  tmp
15
15
  archives
16
16
  *-debug.rb
17
+ .rvmrc
18
+ Gemfile.lock
17
19
 
18
20
  # YARD artifacts
19
21
  .yardoc
data/bin/minep-request CHANGED
@@ -5,6 +5,8 @@ require 'socket'
5
5
  require 'WEBSocket'
6
6
  require 'minep-request'
7
7
 
8
+ $buflist = {}
9
+
8
10
  $options = {
9
11
  :host => "localhost",
10
12
  :port => 8080,
@@ -15,17 +17,25 @@ $goon = true
15
17
  $commands = {
16
18
  "authenticate" => Proc.new { |s| Minep::Request.authenticate s},
17
19
  "signup" => Proc.new { |s| Minep::Request.signup s},
18
- "exec" => Proc.new { |s| Minep::Request.exec s},
19
- "insert" => Proc.new { |s| Minep::Request.insert s},
20
- "move" => Proc.new { |s| Minep::Request.move s},
21
- "backspace" => Proc.new { |s| Minep::Request.backspace s},
22
- "delete" => Proc.new { |s| Minep::Request.delete s},
23
- "load" => Proc.new { |s| Minep::Request.load s, $options[:type]},
20
+ "exec" => Proc.new { |s| Minep::Request.exec s, $buflist},
21
+ "insert" => Proc.new { |s| Minep::Request.insert s, $buflist},
22
+ "move" => Proc.new { |s| Minep::Request.move s, $buflist},
23
+ "backspace" => Proc.new { |s| Minep::Request.backspace s, $buflist},
24
+ "delete" => Proc.new { |s| Minep::Request.delete s, $buflist},
25
+ "load" => Proc.new { |s| Minep::Request.load s, $options[:type], $buflist},
26
+ "list" => Proc.new { |s| list s},
24
27
  "help" => Proc.new { |s| help s},
25
28
  "exit" => Proc.new { |s| quit s},
26
29
  "quit" => Proc.new { |s| quit s}
27
30
  }
28
31
 
32
+ def list socket = nil
33
+ puts "Buffers are :"
34
+ $buflist.each_key do |buf|
35
+ puts buf
36
+ end
37
+ end
38
+
29
39
  def quit socket = nil
30
40
  $goon = false
31
41
  puts "Exiting"
@@ -86,14 +96,32 @@ end
86
96
 
87
97
  while $goon do
88
98
  printf ">> "
89
- begin
90
- cmd = Minep.read
91
- if $commands.key? cmd
92
- $commands[cmd].call socket
93
- else
94
- $stderr.puts "Error : unknown command"
99
+ rs = select [$stdin, socket]
100
+ rs.each do |r, w, e|
101
+ if r == $stdin
102
+ begin
103
+ cmd = Minep.read
104
+ if $commands.key? cmd
105
+ $commands[cmd].call socket
106
+ else
107
+ $stderr.puts "Error : unknown command"
108
+ end
109
+ rescue EOFError
110
+ quit
111
+ end
112
+ elsif r == socket
113
+ begin
114
+ str = socket.readpartial 4096
115
+ rescue EOFError
116
+ puts ""
117
+ quit
118
+ end
119
+ if str.nil?
120
+ quit
121
+ else
122
+ tab = str.strip.split
123
+ puts "/!\\ Received a message from server :\n\t#{str.strip}"
124
+ end
95
125
  end
96
- rescue EOFError
97
- quit
98
126
  end
99
127
  end
@@ -4,7 +4,7 @@ module Minep
4
4
  input = input.strip
5
5
  end
6
6
 
7
- def self.makeMsg request, args
7
+ def self.makeMsg request, args, buflist = nil
8
8
  args.each_key do |k|
9
9
  if k == :args
10
10
  printf "#{k} as a space-separated list : "
@@ -21,6 +21,11 @@ module Minep
21
21
  args[k] = read
22
22
  end
23
23
  end
24
+ if buflist and args[:buffer]
25
+ bufferName = args[:buffer]
26
+ args[:buffer] = buflist[bufferName]
27
+ return $stderr.puts "Error : This buffer doesn't exists" if args[:buffer].nil?
28
+ end
24
29
  args["id"] = SecureRandom.uuid
25
30
  "#{request.upcase}=#{JSON.dump args}"
26
31
  end
@@ -31,6 +31,23 @@ module Minep
31
31
  CommandsInfo
32
32
  end
33
33
 
34
+ def self.sendFile port, path, type
35
+ file = File.new path
36
+ content = file.read
37
+ file.close
38
+ server = nil
39
+ if type == :tcp
40
+ server = TCPServer.new "0.0.0.0", port
41
+ elsif type == :websocket
42
+ server = WEBSocket::Server.new "0.0.0.0", port
43
+ end
44
+ socket = server.accept
45
+ socket.write content
46
+ socket.shutdown :RDWR
47
+ socket.close
48
+ server.close
49
+ end
50
+
34
51
  def self.readAndParseResponse request, socket
35
52
  responsetab = socket.readpartial(4096).split '='
36
53
  return $stderr.puts "Error while parsing response"if responsetab[0] != "RESPONSE"
@@ -50,7 +67,7 @@ module Minep
50
67
  response
51
68
  end
52
69
 
53
- def self.load socket, type
70
+ def self.load socket, type, buflist
54
71
  args = {
55
72
  :path => "",
56
73
  :size => 0,
@@ -64,40 +81,27 @@ module Minep
64
81
  printf "port : "
65
82
  args[:port] = Minep.read.to_i
66
83
  args[:id] = SecureRandom.uuid
67
- if File.exist? args[:path]
68
- f = File.new args[:path]
69
- args[:size] = f.size
70
- f.close
71
- Thread.start args[:port], args[:path] do |port, path|
72
- file = File.new args[:path]
73
- content = file.read
74
- file.close
75
- server = nil
76
- if type == :tcp
77
- server = TCPServer.new "0.0.0.0", port
78
- elsif type == :websocket
79
- server = WEBSocket::Server.new "0.0.0.0", port
80
- end
81
- socket = server.accept
82
- socket.write content
83
- socket.shutdown :RDWR
84
- socket.close
85
- server.close
86
- Thread.stop
87
- end
88
- sleep 2
89
- socket.write "LOAD=#{JSON.dump args}"
90
- response = readAndParseResponse "LOAD", socket
91
- return if response.nil?
92
- if response["info"]["uuid"]
93
- puts "Buffer id : #{response["info"]["uuid"]}"
94
- return response["status"]
95
- else
96
- return $stderr.puts "Error while parsing response"
97
- end
98
- else
99
- $stderr.puts "File #{args[:path]} doesn't exists"
84
+ unless File.exist? args[:path]
85
+ return $stderr.puts "File #{args[:path]} doesn't exists"
86
+ end
87
+ f = File.new args[:path]
88
+ args[:size] = f.size
89
+ f.close
90
+ Thread.start args[:port], args[:path], type do |port, path, type|
91
+ sendFile port, path, type
92
+ Thread.stop
100
93
  end
94
+ sleep 2
95
+ socket.write "LOAD=#{JSON.dump args}"
96
+ response = readAndParseResponse "LOAD", socket
97
+ return if response.nil?
98
+ unless response["info"]["uuid"]
99
+ return $stderr.puts "Error while parsing response"
100
+ end
101
+ puts "Buffer id : #{response["info"]["uuid"]}"
102
+ buflist[response["info"]["uuid"]] = response["info"]["uuid"]
103
+ buflist[args[:path]] = response["info"]["uuid"]
104
+ response["status"]
101
105
  end
102
106
 
103
107
  def self.authenticate socket
@@ -105,7 +109,9 @@ module Minep
105
109
  :name => "",
106
110
  :pass => ""
107
111
  }
108
- socket.write Minep.makeMsg("AUTHENTICATE", args)
112
+ ret = Minep.makeMsg("AUTHENTICATE", args)
113
+ return if ret.nil?
114
+ socket.write ret
109
115
  response = readAndParseResponse "AUTHENTICATE", socket
110
116
  return if response.nil?
111
117
  response["status"]
@@ -118,64 +124,76 @@ module Minep
118
124
  :email => "",
119
125
  :website => ""
120
126
  }
121
- socket.write Minep.makeMsg("SIGNUP", args)
127
+ ret = Minep.makeMsg("SIGNUP", args)
128
+ return if ret.nil?
129
+ socket.write ret
122
130
  response = readAndParseResponse "SIGNUP", socket
123
131
  return if response.nil?
124
132
  response["status"]
125
133
  end
126
134
 
127
- def self.exec socket
135
+ def self.exec socket, buflist
128
136
  args = {
129
137
  :buffer => "",
130
138
  :command => "",
131
139
  :args => []
132
140
  }
133
- socket.write Minep.makeMsg("EXEC", args)
141
+ ret = Minep.makeMsg("EXEC", args, buflist)
142
+ return if ret.nil?
143
+ socket.write ret
134
144
  response = readAndParseResponse "EXEC", socket
135
145
  return if response.nil?
136
146
  response["status"]
137
147
  end
138
148
 
139
- def self.insert socket
149
+ def self.insert socket, buflist
140
150
  args = {
141
151
  :buffer => "",
142
152
  :text => ""
143
153
  }
144
- socket.write Minep.makeMsg("INSERT", args)
154
+ ret = Minep.makeMsg("INSERT", args, buflist)
155
+ return if ret.nil?
156
+ socket.write ret
145
157
  response = readAndParseResponse "INSERT", socket
146
158
  return if response.nil?
147
159
  response["status"]
148
160
  end
149
161
 
150
- def self.move socket
162
+ def self.move socket, buflist
151
163
  args = {
152
164
  :buffer => "",
153
165
  :direction => "",
154
166
  :number => 0
155
167
  }
156
- socket.write Minep.makeMsg("MOVE", args)
168
+ ret = Minep.makeMsg("MOVE", args, buflist)
169
+ return if ret.nil?
170
+ socket.write ret
157
171
  response = readAndParseResponse "MOVE", socket
158
172
  return if response.nil?
159
173
  response["status"]
160
174
  end
161
175
 
162
- def self.backspace socket
176
+ def self.backspace socket, buflist
163
177
  args = {
164
178
  :buffer => "",
165
179
  :number => 0
166
180
  }
167
- socket.write Minep.makeMsg("BACKSPACE", args)
181
+ ret = Minep.makeMsg("BACKSPACE", args, buflist)
182
+ return if ret.nil?
183
+ socket.write ret
168
184
  response = readAndParseResponse "BACKSPACE", socket
169
185
  return if response.nil?
170
186
  response["status"]
171
187
  end
172
188
 
173
- def self.delete socket
189
+ def self.delete socket, buflist
174
190
  args = {
175
191
  :buffer => "",
176
192
  :number => 0
177
193
  }
178
- socket.write Minep.makeMsg("DELETE", args)
194
+ ret = Minep.makeMsg("DELETE", args, buflist)
195
+ return if ret.nil?
196
+ socket.write ret
179
197
  response = readAndParseResponse "DELETE", socket
180
198
  return if response.nil?
181
199
  response["status"]
@@ -1,6 +1,6 @@
1
1
  module Minep
2
2
  module Request
3
- VERSION = "0.0.6"
3
+ VERSION = "0.0.7"
4
4
  DATE = Time.now.to_s.split[0]
5
5
  end
6
6
  end
@@ -19,5 +19,5 @@ EOS
19
19
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
20
20
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
21
21
  gem.require_paths = ["lib"]
22
- gem.add_runtime_dependency 'WEBSocket', '~> 0.0.1', '>= 0.0.1'
22
+ gem.add_runtime_dependency 'WEBSocket', '~> 0.1.0', '>= 0.1.0'
23
23
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minep-request
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-13 00:00:00.000000000 Z
12
+ date: 2013-01-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: WEBSocket
@@ -18,10 +18,10 @@ dependencies:
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 0.0.1
21
+ version: 0.1.0
22
22
  - - ! '>='
23
23
  - !ruby/object:Gem::Version
24
- version: 0.0.1
24
+ version: 0.1.0
25
25
  type: :runtime
26
26
  prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,10 +29,10 @@ dependencies:
29
29
  requirements:
30
30
  - - ~>
31
31
  - !ruby/object:Gem::Version
32
- version: 0.0.1
32
+ version: 0.1.0
33
33
  - - ! '>='
34
34
  - !ruby/object:Gem::Version
35
- version: 0.0.1
35
+ version: 0.1.0
36
36
  description: ! 'Binary allowing the communication with a MINE server. It support both
37
37
  MINE Protocol over TCP and over WebSocket.
38
38