class ServerConsole
this file is part of manqod-server-console manqod is distributed under the CDDL licence the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
Public Class Methods
new(name,server_uri,client_uri)
click to toggle source
Calls superclass method
# 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.set_expander_column(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(buttons=Gtk::Toolbar.new,false,false) holder.pack_end(Gtk::ScrolledWindow.new.set_policy(Gtk::POLICY_AUTOMATIC,Gtk::POLICY_AUTOMATIC).add(view)) buttons.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 } buttons.append(Gtk::Stock::PROPERTIES,"set the connection's properties"){edit_connection(view,tree_store,self)} buttons.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 } buttons.append_space buttons.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 } buttons.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 } buttons.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 } buttons.append_space buttons.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 } buttons.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 } buttons.append_space buttons.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 } buttons.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 } buttons.append(Gtk::Stock::QUIT,"leave manqod-server-console"){Gtk.main_quit if Gtk::ask("Really Quit?")} buttons.set_toolbar_style(Gtk::Toolbar::ICONS) add(holder) show_all end
Public Instance Methods
edit_connection(view,tree_store,parent_window)
click to toggle source
# 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