my-process-server 0.0.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.
data/README.rdoc ADDED
File without changes
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ begin
2
+ require 'jeweler'
3
+ Jeweler::Tasks.new do |gemspec|
4
+ gemspec.name = "my-process-server"
5
+ gemspec.summary = "Daemon to run local system calls"
6
+ gemspec.description = "Daemon to run local system calls."
7
+
8
+ gemspec.email = "anylyne@gmail.com"
9
+ gemspec.homepage = ""
10
+ gemspec.authors = ["Pedro Dias", "Carolina Mascarenhas"]
11
+ end
12
+ rescue LoadError
13
+ puts "Jeweler not available. Install it with: gem install jeweler"
14
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'rubygems'
4
+ require 'process_server'
5
+
6
+ process_server = Server.new
7
+ process_server.start
data/lib/client.rb ADDED
File without changes
@@ -0,0 +1,5 @@
1
+ require 'socket'
2
+
3
+ require 'server'
4
+ require 'client'
5
+
data/lib/server.rb ADDED
@@ -0,0 +1,75 @@
1
+ class Server
2
+
3
+ def start
4
+ @server = TCPServer.open(2000)
5
+ loop {
6
+
7
+ Thread.new(@server.accept) do |socket|
8
+ begin
9
+
10
+ unless localhost?(socket)
11
+ socket.puts "Error"
12
+ next
13
+ end
14
+ socket.puts "Welcome"
15
+
16
+ msg_client = socket.recvfrom( 10000 ) # recebe mensagem - 10000 bytes - do cliente
17
+
18
+ if stop_message?(msg_client.to_s)
19
+ socket.close
20
+ break
21
+ end
22
+
23
+ if valid_command?(msg_client.to_s) and execute_command(msg_client.to_s)
24
+ socket.puts "Success"
25
+ else
26
+ socket.puts "Error"
27
+ end
28
+
29
+ socket.close # fecha conexão
30
+
31
+ rescue => e
32
+ puts "Dando erro no loop #{e.backtrace}"
33
+ socket.close
34
+ end
35
+ end
36
+ }
37
+ end
38
+
39
+ def stop
40
+ begin
41
+ socket = TCPSocket.open('localhost', 2000)
42
+ socket.gets
43
+ socket.write "stop"
44
+
45
+ @server.close unless @server.closed?
46
+ rescue => e
47
+ puts "Dando erro no close #{e.backtrace}"
48
+ end
49
+ end
50
+
51
+ private
52
+ def localhost? socket
53
+ socket.peeraddr[2] == 'localhost'
54
+ end
55
+
56
+ def stop_message? message
57
+ message == 'stop'
58
+ end
59
+
60
+ def valid_command? command
61
+ one_command?(command) and ffmpeg_command?(command)
62
+ end
63
+
64
+ def one_command? command
65
+ command !~ /;/
66
+ end
67
+
68
+ def ffmpeg_command? command
69
+ command =~ /ffmpeg/
70
+ end
71
+
72
+ def execute_command command
73
+ system "#{command} > out"
74
+ end
75
+ end
@@ -0,0 +1,134 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Server' do
4
+
5
+ it 'should be stoped' do
6
+ start_server
7
+ @process_server.stop
8
+ lambda { TCPSocket.open('localhost', 2000) }.should raise_error Errno::ECONNREFUSED
9
+ end
10
+
11
+ context 'when dealing with one connection' do
12
+ before do
13
+ start_server
14
+ start_client
15
+ end
16
+
17
+ after do
18
+ @process_server.stop
19
+ end
20
+
21
+ it 'should send a welcome message and receive a system call' do
22
+ welcome = @socket.gets
23
+ welcome.should_not be_empty
24
+ welcome.should match /Welcome/
25
+
26
+ @socket.write "ffmpeg -version"
27
+ success = @socket.gets
28
+ success.should_not be_empty
29
+ success.should match /Success/
30
+ end
31
+
32
+ it 'should send a error message when receiving a invalid system call' do
33
+ @socket.gets
34
+ @socket.write "command_doesnt_exists"
35
+ error = @socket.gets
36
+ error.should_not be_empty
37
+ error.should match /Error/
38
+ end
39
+
40
+ it 'should send a error message when receiving a non ffmpeg command' do
41
+ @socket.gets
42
+ @socket.write "ls"
43
+ error = @socket.gets
44
+ error.should_not be_empty
45
+ error.should match /Error/
46
+ end
47
+
48
+ it 'should send a error message when receiving more than one command' do
49
+ @socket.gets
50
+ @socket.write "ffmpeg -version; ls"
51
+ error = @socket.gets
52
+ error.should_not be_empty
53
+ error.should match /Error/
54
+ end
55
+ end
56
+
57
+ context 'when dealing with more than one connection' do
58
+ before do
59
+ start_server
60
+ start_client
61
+ end
62
+
63
+ it 'should receive receive a system call' do
64
+ @socket.gets
65
+ @socket.write "ffmpeg -version"
66
+ success = @socket.gets
67
+ success.should_not be_empty
68
+ success.should match /Success/
69
+
70
+ @socket = start_client
71
+ @socket.gets
72
+ @socket.write "ffmpeg -version"
73
+ success = @socket.gets
74
+ success.should_not be_empty
75
+ success.should match /Success/
76
+ end
77
+ end
78
+
79
+ context 'when dealing with concurrent connections' do
80
+
81
+ it 'should receive a system call' do
82
+ socket1 = start_client
83
+ socket2 = start_client
84
+
85
+ welcome = socket1.gets
86
+ welcome.should_not be_empty
87
+
88
+ welcome = socket2.gets
89
+ welcome.should_not be_empty
90
+
91
+ socket1.write "ffmpeg -version"
92
+ success = socket1.gets
93
+ success.should_not be_empty
94
+ success.should match /Success/
95
+
96
+ socket2.write "ffmpeg -version"
97
+ success = socket2.gets
98
+ success.should_not be_empty
99
+ success.should match /Success/
100
+ end
101
+ end
102
+
103
+ private
104
+ def start_client
105
+ @socket = TCPSocket.open('localhost', 2000)
106
+ @socket.should_not be_nil
107
+ @socket
108
+ end
109
+ def start_server
110
+ @process_server = Server.new
111
+ Thread.start {
112
+ @process_server.start
113
+ }
114
+ end
115
+ end
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+
@@ -0,0 +1 @@
1
+ require 'process_server'
metadata ADDED
@@ -0,0 +1,77 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: my-process-server
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Pedro Dias
14
+ - Carolina Mascarenhas
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2011-03-04 00:00:00 -03:00
20
+ default_executable: process-server
21
+ dependencies: []
22
+
23
+ description: Daemon to run local system calls.
24
+ email: anylyne@gmail.com
25
+ executables:
26
+ - process-server
27
+ extensions: []
28
+
29
+ extra_rdoc_files:
30
+ - README.rdoc
31
+ files:
32
+ - README.rdoc
33
+ - Rakefile
34
+ - VERSION
35
+ - bin/process-server
36
+ - lib/client.rb
37
+ - lib/process_server.rb
38
+ - lib/server.rb
39
+ - spec/server_spec.rb
40
+ - spec/spec_helper.rb
41
+ has_rdoc: true
42
+ homepage: ""
43
+ licenses: []
44
+
45
+ post_install_message:
46
+ rdoc_options: []
47
+
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ hash: 3
56
+ segments:
57
+ - 0
58
+ version: "0"
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ hash: 3
65
+ segments:
66
+ - 0
67
+ version: "0"
68
+ requirements: []
69
+
70
+ rubyforge_project:
71
+ rubygems_version: 1.4.2
72
+ signing_key:
73
+ specification_version: 3
74
+ summary: Daemon to run local system calls
75
+ test_files:
76
+ - spec/server_spec.rb
77
+ - spec/spec_helper.rb