Class: ServerConsole

Inherits:
Gtk::Window
  • Object
show all
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

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.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

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