お絵かきサーバーsample

draw_server0.rb

require 'bundler/setup'
require 'gtk2'
require 'socket'

w = Gtk::Window.new
w.set_size_request(400, 400)
w.set_resizable(false)
w.set_app_paintable(true)
w.realize

drawable = w.window
gc = Gdk::GC.new(drawable)
colormap = Gdk::Colormap.system
black = Gdk::Color.new(0, 60000, 0)
red = Gdk::Color.new(60000, 0, 0)
colormap.alloc_color(black, false, true)
colormap.alloc_color(red, false, true)

w.signal_connect("expose_event") do
  gc.set_foreground(red)
  drawable.draw_rectangle(gc, true, 0, 0, 400, 400)
end

Thread.start(drawable, gc, black, w) do |d, gc, b, w|
  s0 = TCPServer.open(6934)
  id = Gtk.timeout_add(100) do
    Gtk.timeout_remove(id)
    gc.set_foreground(b)
    Thread.start(s0.accept, d, gc) do |sock, d, gc|
      (d.draw_rectangle(gc, true, 0, 0, 400, 400)) if sock.gets.chomp == "line"
      sock.close
    end
  end
end

w.signal_connect("destroy") {Gtk.main_quit}

w.show_all
Gtk.main

 
draw_client0.rb

require 'socket'

sock = TCPSocket.open("localhost", 6934)
sock.puts "line"
sock.close