Posted to tcl by mookie at Sun Jul 30 16:52:27 GMT 2023view pretty

###
namespace eval sparkle {
#
set myDomain "neoncrystal.com" ;# Where these files exist
set myForest "/srv/.forest./.:." ;#Forest location, shouldnt need to change
#
set myCrystal "$myForest/$myDomain/crystal" ;#CrystalLocation
set myNeonSys "$myCrystal/neonSys"
#
set mySparkle "$myCrystal/neonSparkle"
set myModules "$mySparkle/modules"
#
source $sparkle::myModules/system.ix ;# sources: profile, timeclock
}

proc sparkle::client { crystal socket_hexkey action args } {
# Procedure to handle client actions
variable $socket_hexkey			;# Gain access to variable for hexkkey
set base32_submenu [lindex $args 0]
set base16_socket [lindex $args 1]
try {

;# Switch
# store_client  - Stores the client UUID (fetches mainmenu from genMenu.ix)
# recall_client - Recalls the client UUID
# my_profile   - Displays the profile information based on the hexkey given
# display_image - Displays an image
# timeclock     - Used for the timeclock

;# timeclock Args
# 1 - Used to display the submenu | Adjust TimeZone / Colour
# 2 - Displays the timezone menu
# 3 - Shows the time_colourmenu

switch $action {

store_client { sparkle::store_client $socket_hexkey ; sparkle::sock(send) $crystal [sparkle::genMenu $socket_hexkey mainmenu]
close $crystal }

recall_client { sparkle::sock(send) $crystal [sparkle::recall_client $socket_hexkey]
close $crystal }

display_image { set a_bird [sparkle::2Hex "[sparkle::base64 "image" [sparkle::2Base "[dict get $sparkle::img site a_bird]"]]"]
sparkle::sock(send) $crystal "$a_bird" ; close $crystal }

my_profile { sparkle::sock(send) $crystal [profile::display $socket_hexkey] ; close $crystal }

under_construction {
set base16_nofeature [sparkle::2Hex  "This feature is under construction"]
sparkle::sock(send) $crystal $base16_nofeature ; close $crystal }

timeclock {
# Sub Menu
;# Sources from: sparks/timeclock.ix
;#   - proc timebar requires: hexkey, menu
;# 1 - Displays the sub menu options
;# 2 - Displays the timezone options
;# 3 - Displays the Time Colour Menu options
;# 4 - Africa Timezones - Triggered from timeSwitch as packet (switches within neonSparkle loaded by sparkle.ix)
;# 5 - South Amercia Timezones - Triggered from timeSwitch as packet
switch $base32_submenu {
1 { sparkle::sock(send) $crystal [sparkle::timebar $socket_hexkey time_submenu]    ; close $crystal }
2 { sparkle::sock(send) $crystal [sparkle::timebar $socket_hexkey time_zonemenu]   ; close $crystal }
3 { sparkle::sock(send) $crystal [sparkle::timebar $socket_hexkey time_colourmenu] ; close $crystal }
4 { sparkle::sock(send) $crystal [sparkle::timebar $socket_hexkey timezone_africa  $base16_socket] ; close $crystal }
5 { sparkle::sock(send) $crystal [sparkle::timebar $socket_hexkey timezone_amercia $base16_socket] ; close $crystal }
default { sparkle::sock(send) $crystal [sparkle::timebar $socket_hexkey timedate]  ; close $crystal }
}
}

default {
set base16_default [sparkle::2Hex  "feature or request unavailable"]
sparkle::sock(send) $crystal $base16_default ; close $crystal }

} ;#end switch action
} on error {err options} {
puts $options
sparkle::sock(send) $crystal [sparkle::2Hex  "client error :: $err"] ; close $crystal
} ;#end try
} ;#end procedure