Commit efc2857

mo khan <mo@mokhan.ca>
2014-08-29 03:37:53
extract classes for client/server.
1 parent 74f15c9
lib/camtasy/client.rb
@@ -1,4 +1,12 @@
-require "drb"
+module Camtasy
+  class Client
+    def initialize(server = DRbObject.new_with_uri('druby://localhost:8787'), stdout = $stdout)
+      @server = server
+      @stdout = stdout
+    end
 
-server = DRbObject.new_with_uri('druby://localhost:8787')
-print server.take_photo
+    def run
+      @stdout.print server.take_photo
+    end
+  end
+end
lib/camtasy/preview.rb
@@ -1,16 +1,22 @@
 require 'av_capture'
 require 'io/console'
 
-session = AVCapture::Session.new
-dev = AVCapture.devices.find(&:video?)
+module Camtasy
+  class Preview
+    def run
+      session = AVCapture::Session.new
+      dev = AVCapture.devices.find(&:video?)
 
-session.run_with(dev) do |connection|
-  loop do
-    case $stdin.getch
-    when 'q' then break # quit when you hit 'q'
-    else
-      IO.popen("open -g -f -a /Applications/Preview.app", 'w') do |f|
-        f.write connection.capture
+      session.run_with(dev) do |connection|
+        loop do
+          case $stdin.getch
+          when 'q' then break # quit when you hit 'q'
+          else
+            IO.popen("open -g -f -a /Applications/Preview.app", 'w') do |f|
+              f.write connection.capture
+            end
+          end
+        end
       end
     end
   end
lib/camtasy/server.rb
@@ -1,31 +1,33 @@
-require "av_capture"
-require "drb"
+module Camtasy
+  class PhotoServer
+    attr_reader :request, :response
 
-class PhotoServer
-  attr_reader :request, :response
-
-  def initialize
-    @request = Queue.new
-    @response = Queue.new
-    @mutex = Mutex.new
-  end
+    def initialize
+      @request = Queue.new
+      @response = Queue.new
+      @mutex = Mutex.new
+    end
 
-  def take_photo
-    @mutex.synchronize do
-      @request << "x"
-      @response.pop
+    def take_photo
+      @mutex.synchronize do
+        @request << "x"
+        @response.pop
+      end
     end
-  end
-end
 
-server = PhotoServer.new
-Thread.new do
-  AVCapture::Session.new.run_with(AVCapture.devices.find(&:video?)) do |connection|
-    while server.request.pop
-      server.response.push(connection.capture)
+    def run
+      Thread.new do
+        AVCapture::Session.new.run_with(AVCapture.devices.find(&:video?)) do |connection|
+          while server.request.pop
+            server.response.push(connection.capture)
+          end
+        end
+      end
+
+      DRb.start_service('druby://localhost:8787', server)
+      DRb.thread.join
     end
   end
 end
 
-DRb.start_service('druby://localhost:8787', server)
-DRb.thread.join
+PhotoServer.new.run
lib/camtasy.rb
@@ -1,4 +1,8 @@
+require "av_capture"
+require "drb"
 require "camtasy/version"
+require "camtasy/client"
+require "camtasy/server"
 
 module Camtasy
   # Your code goes here...