Mercurial Hosting > luan
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