root/lang/ruby/misc/memcachedclient.rb @ 19841

Revision 19841, 2.2 kB (checked in by drry, 6 years ago)
  • oops oops
Line 
1require 'Memcached'
2require 'gtk2'
3
4# clone of http://code.sixapart.com/svn/memcached/trunk/frontends/gtk2-perl/
5
6$cmds = []
7$cmd_cur = -1
8
9$mc = Memcached.new('127.0.0.1:11211')
10
11win = Gtk::Window.new()
12win.signal_connect('delete-event') do
13        Gtk.main_quit()
14end
15win.set_border_width(10)
16
17vb = Gtk::VBox::new()
18textview = Gtk::TextView::new()
19$buffer = textview.buffer()
20textview.set_editable(false)
21scroll = Gtk::ScrolledWindow::new()
22scroll.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC)
23scroll.set_shadow_type(Gtk::SHADOW_IN)
24scroll.add(textview)
25vb.pack_start(scroll, true, true, 0)
26
27textview.modify_font(Pango::FontDescription::new('monospace'))
28$buffer.create_tag('command', {'foreground' => 'blue' })
29$buffer.create_tag('data',    {'foreground' => 'black'})
30$buffer.create_tag('error',   {'foreground' => 'red'  })
31
32$entry = Gtk::Entry::new()
33$entry.signal_connect('key_press_event') do |entry, ev|
34        case ev.keyval
35        when 65362
36                $cmd_cur += 1 if $cmd_cur < ($cmds.size - 1)
37                entry.set_text($cmds[$cmd_cur]) if $cmds[$cmd_cur]
38        when 65364
39                $cmd_cur -= 1 if $cmd_cur >= 0
40                if $cmd_cur >= 0 and $cmds[$cmd_cur]
41                        entry.set_text($cmds[$cmd_cur])
42                else
43                        entry.set_text('')
44                end
45        end
46end
47
48$entry.signal_connect('activate') do |entry|
49        text = entry.text()
50        if text =~ /\w/
51                run_command(text)
52                entry.set_text('')
53        end
54end
55vb.pack_start($entry, false, false, 0)
56
57win.add(vb)
58
59win.set_title('MemCachedClient')
60win.set_default_size(400, 500)
61win.signal_connect('show') do
62        $entry.grab_focus()
63end
64win.show_all()
65
66def display(level, text)
67        $buffer.insert($buffer.end_iter(), "#{text}\n", level)
68end
69
70def run_command(text)
71        $cmds.slice!(1) if $cmd_cur >= 0 and $cmds[$cmd_cur] = text
72        $cmds.unshift(text)
73        $cmd_cur = -1
74
75        display('command', text)
76
77        case text
78        when /^get\s+(\S+)$/i
79                begin
80                        display('data', $mc.get($1))
81                rescue
82                        display('error', 'Not found.')
83                end
84        when /^set\s+(\S+)\s+(.*)$/i
85                begin
86                        $mc.set($1, $2)
87                        display('data', 'Ok.')
88                rescue
89                        display('error', 'Not found.')
90                end
91        when /^delete\s+(\S+)$/i
92                begin
93                        $mc.delete($1)
94                        display('data', 'Ok.')
95                rescue
96                        display('error', 'Not found.')
97                end
98        else
99                display('error', "Unknown command '#{text}'.")
100        end
101end
102
103Gtk.main()
Note: See TracBrowser for help on using the browser.