Class: ServerConsole
- Inherits:
-
Gtk::Window
- Object
- Gtk::Window
- ServerConsole
- Defined in:
- lib/ServerConsole.rb
Overview
this file is part of manqod-server-console manqod is distributed under the CDDL licence the author of manqod is Dobai-Pataky Balint([email protected])
Defined Under Namespace
Classes: MyStore
Instance Method Summary collapse
- #edit_connection(view, tree_store, parent_window) ⇒ Object
-
#initialize(name, server_uri, client_uri) ⇒ ServerConsole
constructor
A new instance of ServerConsole.
Constructor Details
#initialize(name, server_uri, client_uri) ⇒ ServerConsole
Returns a new instance of ServerConsole.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 |
# File 'lib/ServerConsole.rb', line 18 def initialize(name,server_uri,client_uri) super("Manqod Server Console on #{name}") signal_connect("destroy") {|me| Gtk.main_quit} set_size_request(600,400) require 'drb' DRb.start_service(client_uri) @manqod_server=DRb::DRbObject.new(nil,server_uri) begin @manqod_server.alive? rescue =>err retry if Gtk::warn("no server?","tried: #{server_uri}\n#{err}\n",ERROR,true) exit end #type,conn_name,conn_display,moditem_id,moditem_display #types:0=connection,1=moditem tree_store=MyStore.new(Integer,String,String,Integer,String,String) view=Gtk::TreeView.new(tree_store) renderer = Gtk::CellRendererText.new #view.append_column(conn_col=Gtk::TreeViewColumn.new("connections", renderer, :text => 0)) view.append_column(conn_col=Gtk::TreeViewColumn.new("Server", renderer, :text => 2)) view.append_column(moditem_col = Gtk::TreeViewColumn.new("List", renderer, :text => 4)) view.append_column(cnt_col = Gtk::TreeViewColumn.new("Rows", renderer, :text => 5)) view.(moditem_col).set_enable_tree_lines(true) begin @manqod_server.conn_list{|conn_name,conn| iter=tree_store.append(nil) iter[0]=0 iter[1]=conn_name iter[2]=conn["name"] } rescue =>err retry if Gtk::warn("cannot fill connections list!\nserver is gone?","tried: #{server_uri}\n#{err}\n#{err.backtrace.join("\n")}",ERROR,true) end begin @manqod_server.dbs.each_pair{|conn_name,db| piter=tree_store.find_iter(1,conn_name) begin db.each_moditem{|drb_list_model| iter=tree_store.append(piter) iter[0]=1 iter[3]=drb_list_model.get_id iter[4]=drb_list_model.moditem["display"] iter[5]=drb_list_model.rowcount.to_s } rescue => err p err end } rescue =>err retry if Gtk::warn("cannot get dbs!\nserver is gone?","tried: #{server_uri}\n#{err}\n#{err.backtrace.join("\n")}",ERROR,true) end def edit_connection(view,tree_store,parent_window) if view.cursor[0] and cur_iter=tree_store.get_iter(view.cursor[0]) and cur_iter[0]==0 cn=cur_iter[1] else Gtk::warn("select a connection first!") return end begin cp=ConnectionProperties.new(parent_window,cn,@manqod_server) cur_iter[2]=cp.run rescue =>err retry if Gtk::warn("tried to edit #{cn}",err,ERROR) end end holder=Gtk::VBox.new holder.pack_start(=Gtk::Toolbar.new,false,false) holder.pack_end(Gtk::ScrolledWindow.new.set_policy(Gtk::POLICY_AUTOMATIC,Gtk::POLICY_AUTOMATIC).add(view)) .append(Gtk::Stock::NEW,"create a new connection"){ if Gtk::ask("create a new connection?") dialog=Gtk::Dialog.new("Connection Properties",self,Gtk::Dialog::MODAL,[Gtk::Stock::OK,Gtk::Dialog::RESPONSE_ACCEPT],[Gtk::Stock::CANCEL,Gtk::Dialog::RESPONSE_REJECT]) dh=Gtk::Table.new(2,1) dh.attach_defaults(Gtk::Label.new("connection name"),0,1,0,1) dh.attach_defaults(name=Gtk::Entry.new,1,2,0,1) name.text="new" dialog.vbox.pack_start(dh) dialog.show_all if dialog.run==Gtk::Dialog::RESPONSE_ACCEPT iter=tree_store.append(nil); iter[0]=0 iter[1]=name.text iter[2]=name.text view.set_cursor(iter.path,nil,false) begin @manqod_server.create_conn(name.text) @manqod_server.set_conn_variables(name.text,{"name" => name.text, "uri" => "druby://:5550", "cache_host" => "localhost", "sql_host" => "localhost", "sql_user" => "root", "sql_password" => "", "sql_db" => "manqod", "admin_uri" => "druby://127.0.0.1:5549", "client_uri" => "druby://127.0.0.1:5549", "auto_load" => true, "auto_load_order" => "1", "client_default" => false} ) rescue =>err retry if Gtk::warn("Creating new connection failed",err,ERROR,true) end end dialog.destroy end } .append(Gtk::Stock::PROPERTIES,"set the connection's properties"){edit_connection(view,tree_store,self)} .append(Gtk::Stock::REMOVE,"remove the connection"){ if view.cursor[0] and cur_iter=tree_store.get_iter(view.cursor[0]) and cur_iter[0]==0 if Gtk::ask("delete the connection from the server?") cn=cur_iter[1] begin @manqod_server.remove_conn(cn) rescue => err retry if Gtk::warn("server is gone?\ntried: #{server_uri}",err,ERROR,true) end tree_store.remove(cur_iter) end else Gtk::warn("select a connection first!") end } .append_space .append(Gtk::Stock::EXECUTE,"start the selected server thread"){ if view.cursor[0] and cur_iter=tree_store.get_iter(view.cursor[0]) and cur_iter[0]==0 cn=cur_iter[1] begin @manqod_server.load_conn(cn) @manqod_server.dbs[cn].moditems.each_pair{|moditem_id,drb_list_model| iter=tree_store.append(cur_iter) iter[0]=1 iter[3]=moditem_id iter[4]=drb_list_model.moditem["display"] } rescue retry if Gtk::warn("Starting server thread #{cn} failed",err,ERROR,true) end else Gtk::warn("select a connection first!") end } .append(Gtk::Stock::STOP,"stop the selected server thread"){ if view.cursor[0] and cur_iter=tree_store.get_iter(view.cursor[0]) and cur_iter[0]==0 cn=cur_iter[1] if Gtk::ask("stop server thread #{cn}?") while cur_iter.has_child? do if i=cur_iter.clone.first_child then tree_store.remove(i) end end # tree_store.each{|model,path,iter| tree_store.remove(iter) if iter.parent == cur_iter} begin @manqod_server.free_conn(cn) rescue =>err retry if Gtk::warn("Stop server thread #{cn} failed",err,ERROR,true) end end else Gtk::warn("select a server to stop") end } .append(Gtk::Stock::REFRESH,"reload the selected server thread"){ if view.cursor[0] and cur_iter=tree_store.get_iter(view.cursor[0]) and cur_iter[0]==0 cn=cur_iter[1] if Gtk::ask("reload server thread #{cn}?") while cur_iter.has_child? do if i=cur_iter.clone.first_child then tree_store.remove(i) end end begin @manqod_server.reload_conn(cn) @manqod_server.dbs[cn].moditems.each_pair{|moditem_id,drb_list_model| iter=tree_store.append(cur_iter) iter[0]=1 iter[3]=moditem_id iter[4]=drb_list_model.moditem["display"] } rescue =>err retry if Gtk::warn("Reload server thread #{cn} failed",err,ERROR,true) end end else Gtk::warn("select a server thread to reload") end } .append_space .append(Gtk::Stock::REFRESH,"reload the selected list"){ if view.cursor[0] and cur_iter=tree_store.get_iter(view.cursor[0]) and cur_iter[0]!=0 cn=cur_iter.parent[1] if Gtk::ask("reload item #{cur_iter[3]} on server thread #{cn}?") begin @manqod_server.dbs[cn].reload_moditem(cur_iter[3]) rescue =>err retry if Gtk::warn("Reload list #{cn} failed",err,ERROR,true) end end else Gtk::warn("select an item to reload") end } .append(Gtk::Stock::JUMP_TO,"download selected list"){ if view.cursor[0] and cur_iter=tree_store.get_iter(view.cursor[0]) and cur_iter[0]!=0 cn=cur_iter.parent[1] if Gtk::ask("download item #{cur_iter[3]} on server thread #{cn}?") begin list=@manqod_server.dbs[cn].moditem(cur_iter[3]).filtered_fetch2 print "downloaded #{list.size} rows\n" rescue =>err retry if Gtk::warn("Download test of #{cn} failed",err,ERROR,true) end end else Gtk::warn("select an item to download") end } .append_space .append(Gtk::Stock::STOP,"Stop manqod server"){ if Gtk::ask("Are you sure you want to stop the manqod server and all it's server threads?") begin @manqod_server.stop rescue =>err retry if Gtk::warn("Stop server failed",err,ERROR,true) end Gtk.main_quit if Gtk::ask("Nothing to do here anymore,\nDo you wan to Quit?") end } .append(Gtk::Stock::ABOUT,"about the registered users"){ wu=Gtk::Window.new('Manqod Server Console') wu.move(position[0]+size[0]+10,position[1]) wu.set_size_request(200,size[1]) tree_store=Gtk::ListStore.new(String,String) view=Gtk::TreeView.new(tree_store) renderer = Gtk::CellRendererText.new view.append_column(Gtk::TreeViewColumn.new("Connection", renderer, :text => 0)) view.append_column(Gtk::TreeViewColumn.new("Nick", renderer, :text => 1)) wu.add(view) wu.show_all begin @manqod_server.connected_clients.each_pair{|rpc,db| iter=tree_store.append iter[0]=db begin iter[1]=rpc.nick rescue =>e #connection failed end } rescue =>err retry if Gtk::warn("Fetching client list failed",err,ERROR,true) end } .append(Gtk::Stock::QUIT,"leave manqod-server-console"){Gtk.main_quit if Gtk::ask("Really Quit?")} .(Gtk::Toolbar::ICONS) add(holder) show_all end |
Instance Method Details
#edit_connection(view, tree_store, parent_window) ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/ServerConsole.rb', line 78 def edit_connection(view,tree_store,parent_window) if view.cursor[0] and cur_iter=tree_store.get_iter(view.cursor[0]) and cur_iter[0]==0 cn=cur_iter[1] else Gtk::warn("select a connection first!") return end begin cp=ConnectionProperties.new(parent_window,cn,@manqod_server) cur_iter[2]=cp.run rescue =>err retry if Gtk::warn("tried to edit #{cn}",err,ERROR) end end |