changeset 1956:19de10be4c37 default tip

swing and rpc
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 28 May 2025 15:58:56 -0600
parents a4dde9c54f3e
children
files src/luan/modules/Rpc.luan src/luan/modules/Thread.luan src/luan/modules/swing/Awt_window.luan src/luan/modules/swing/List.luan src/luan/modules/swing/Swing.luan
diffstat 5 files changed, 39 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/src/luan/modules/Rpc.luan	Tue May 27 22:29:05 2025 -0600
+++ b/src/luan/modules/Rpc.luan	Wed May 28 15:58:56 2025 -0600
@@ -212,29 +212,32 @@
 end
 Rpc.new_server_socket = new_server_socket
 
-local function serve_socket(socket_server,fns,multithreaded)
+local function new_server_fn(socket,fns)
+	return function()
+		local responder = nil
+		try
+			responder = rpc_responder(socket,fns)
+			while not responder.is_closed() do
+				responder.respond()
+			end
+		catch e
+			logger.info(e)
+		finally
+			responder and responder.after_close and responder.after_close()
+		end
+	end
+end
+Rpc.new_server_fn = new_server_fn
+
+local function server_handler(socket,fns)
+	Thread.run(new_server_fn(socket,fns))
+end
+
+local function serve_socket(socket_server,fns,handler)
 	fns = fns or Rpc.functions
 	while true do
 		try
-			local socket = socket_server.accept()
-			local function server()
-				local responder = nil
-				try
-					responder = rpc_responder(socket,fns)
-					while not responder.is_closed() do
-						responder.respond()
-					end
-				catch e
-					logger.info(e)
-				finally
-					responder and responder.after_close and responder.after_close()
-				end
-			end
-			if multithreaded then
-				Thread.run(server)
-			else
-				server()
-			end
+			handler( socket_server.accept(), fns )
 		catch e
 			logger.error(e)
 		end
@@ -244,7 +247,7 @@
 
 function Rpc.serve(port,fns)
 	local socket_server = new_server_socket(port)
-	serve_socket(socket_server,fns,true)
+	serve_socket(socket_server,fns,server_handler)
 end_function
 
 return Rpc
--- a/src/luan/modules/Thread.luan	Tue May 27 22:29:05 2025 -0600
+++ b/src/luan/modules/Thread.luan	Wed May 28 15:58:56 2025 -0600
@@ -1,5 +1,6 @@
 require "java"
 local ThreadLuan = require "java:luan.modules.ThreadLuan"
+local ThreadJava = require "java:java.lang.Thread"
 local ReentrantLock = require "java:java.util.concurrent.locks.ReentrantLock"
 local Luan = require "luan:Luan.luan"
 local error = Luan.error
@@ -14,6 +15,10 @@
 
 Thread.sleep = ThreadLuan.sleep
 
+function Thread.current_thread_name()
+	return ThreadJava.currentThread().getName()
+end
+
 local function safe(fn)
 	return function()
 		try
--- a/src/luan/modules/swing/Awt_window.luan	Tue May 27 22:29:05 2025 -0600
+++ b/src/luan/modules/swing/Awt_window.luan	Wed May 28 15:58:56 2025 -0600
@@ -44,6 +44,8 @@
 	local focusable_window_state = remove(props,"focusable_window_state")
 	if focusable_window_state~=nil then jwindow.setFocusableWindowState(focusable_window_state) end
 	window.pack = jwindow.pack
+	window.to_front = jwindow.toFront
+	window.set_always_on_top = jwindow.setAlwaysOnTop
 	function window.add_close_listener(close_listener)
 		jwindow.addWindowListener(newCloseListener(close_listener))
 	end
--- a/src/luan/modules/swing/List.luan	Tue May 27 22:29:05 2025 -0600
+++ b/src/luan/modules/swing/List.luan	Wed May 28 15:58:56 2025 -0600
@@ -27,12 +27,20 @@
 	if key == "size" then
 		return jlist.model.getSize()
 	end
+	if key == "selected_value" then
+		return jlist.getSelectedValue()
+	end
 	return fail
 end
 
 function List.__new_index(list,key,value)
 	local rtn = super__new_index(list,key,value)
 	if rtn ~= fail then return end
+	local jlist = list.java
+	if key == "selected_value" then
+		jlist.setSelectedValue(value,true)
+		return
+	end
 	return fail
 end
 
@@ -54,9 +62,6 @@
 	check_empty(props)
 	list.add_element = jlist.model.addElement
 	list.remove_element = jlist.model.removeElement
-	function list.set_selected_value(value)
-		jlist.setSelectedValue(value,true)
-	end
 	function list.repaint(value)
 		jlist.repaint()
 	end
--- a/src/luan/modules/swing/Swing.luan	Tue May 27 22:29:05 2025 -0600
+++ b/src/luan/modules/swing/Swing.luan	Wed May 28 15:58:56 2025 -0600
@@ -6,7 +6,6 @@
 local URI = require "java:java.net.URI"
 local Insets = require "java:java.awt.Insets"
 local Desktop = require "java:java.awt.Desktop"
-local Window = require "java:java.awt.Window"
 local UIManager = require "java:javax.swing.UIManager"
 local SwingConstants = require "java:javax.swing.SwingConstants"
 local FlatLightLaf = require "java:com.formdev.flatlaf.FlatLightLaf"
@@ -47,13 +46,6 @@
 	desktop.browse( URI.new(url) )
 end
 
-function Swing.to_front()
-	local windows = {Window.getOwnerlessWindows()}
-	for _, window in ipairs(windows) do
-		window.toFront()
-	end
-end
-
 Swing.alignments = {
 	left = SwingConstants.LEFT
 	center = SwingConstants.CENTER