diff --git a/Data/Data.4DD b/Data/Data.4DD
index eb6d6f0..e0839d0 100644
Binary files a/Data/Data.4DD and b/Data/Data.4DD differ
diff --git a/Plugins/4D InternetCommands.bundle/Contents/Info.plist b/Plugins/4D InternetCommands.bundle/Contents/Info.plist
deleted file mode 100644
index 1fcbe33..0000000
--- a/Plugins/4D InternetCommands.bundle/Contents/Info.plist
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
- BuildMachineOSBuild
- 24C101
- CFBundleDevelopmentRegion
- English
- CFBundleExecutable
- 4D InternetCommands
- CFBundleIdentifier
- com.4D.4DIC
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- 4D Internet Commands
- CFBundlePackageType
- BNDL
- CFBundleShortVersionString
- 20 R8 build 20R8.100073
- CFBundleSignature
- 4D06
- CFBundleSupportedPlatforms
-
- MacOSX
-
- CFBundleVersion
- 20.8.0
- CSResourcesFileMapped
-
- DTCompiler
- com.apple.compilers.llvm.clang.1_0
- DTPlatformBuild
- 24A336
- DTPlatformName
- macosx
- DTPlatformVersion
- 15.0
- DTSDKBuild
- 24A336
- DTSDKName
- macosx15.0
- DTXcode
- 1600
- DTXcodeBuild
- 16A242d
- LSMinimumSystemVersion
- 10.10
- NSHumanReadableCopyright
- "© 4D SAS, 1999-2025. All rights reserved."
- com.4d.version
- 20 R8 build 20R8.100073
-
-
diff --git a/Plugins/4D InternetCommands.bundle/Contents/MacOS/4D InternetCommands b/Plugins/4D InternetCommands.bundle/Contents/MacOS/4D InternetCommands
deleted file mode 100644
index d1a8d01..0000000
Binary files a/Plugins/4D InternetCommands.bundle/Contents/MacOS/4D InternetCommands and /dev/null differ
diff --git a/Plugins/4D InternetCommands.bundle/Contents/PkgInfo b/Plugins/4D InternetCommands.bundle/Contents/PkgInfo
deleted file mode 100644
index a23888c..0000000
--- a/Plugins/4D InternetCommands.bundle/Contents/PkgInfo
+++ /dev/null
@@ -1 +0,0 @@
-BNDL4D06
\ No newline at end of file
diff --git a/Plugins/4D InternetCommands.bundle/Contents/Resources/constants.xlf b/Plugins/4D InternetCommands.bundle/Contents/Resources/constants.xlf
deleted file mode 100644
index 6d47a3b..0000000
--- a/Plugins/4D InternetCommands.bundle/Contents/Resources/constants.xlf
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
- This file is not localized.
-
-
-
-
- IC Commands
-
-
- Use SSL
-
-
-
-
-
diff --git a/Plugins/4D InternetCommands.bundle/Contents/Resources/en.lproj/InfoPlist.strings b/Plugins/4D InternetCommands.bundle/Contents/Resources/en.lproj/InfoPlist.strings
deleted file mode 100644
index 4b34a87..0000000
--- a/Plugins/4D InternetCommands.bundle/Contents/Resources/en.lproj/InfoPlist.strings
+++ /dev/null
@@ -1,2 +0,0 @@
-CFBundleGetInfoString = "© 4D SAS, 1999-2025. All rights reserved.";
-NSHumanReadableCopyright = "© 4D SAS, 1999-2025. All rights reserved.";
diff --git a/Plugins/4D InternetCommands.bundle/Contents/Resources/manifest.json b/Plugins/4D InternetCommands.bundle/Contents/Resources/manifest.json
deleted file mode 100644
index 057164e..0000000
--- a/Plugins/4D InternetCommands.bundle/Contents/Resources/manifest.json
+++ /dev/null
@@ -1,140 +0,0 @@
-{"name":"4D Internet Commands","id":15010,"commands":[{"theme":"IC Internet","syntax":"NET_NameToAddr(&S;&L):I"}
-,{"theme":"IC Internet","syntax":"NET_AddrToName(&L;&S;&S):I"}
-,{"theme":"IC TCP/IP","syntax":"TCP_Open(&S;&I;&L;&I):I"}
-,{"theme":"IC TCP/IP","syntax":"TCP_Close(&L):I"}
-,{"theme":"IC TCP/IP","syntax":"TCP_Send(&L;&T):I"}
-,{"theme":"IC TCP/IP","syntax":"TCP_Receive(&L;&T):I"}
-,{"theme":"IC TCP/IP","syntax":"TCP_Listen(&S;&I;&I;&I;&L):I"}
-,{"theme":"IC TCP/IP","syntax":"TCP_State(&L;&I):I"}
-,{"theme":"IC Internet","syntax":"NET_Resolve(&S;&S):I"}
-,{"theme":"IC Utilities","syntax":"IT_MyTCPAddr(&S;&S):I"}
-,{"theme":"IC Utilities","syntax":"IT_MacTCPVer(&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_QuickSend(&U;&U;&U;&U;&U;&L;&L;&U;&U):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_New(&L):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_Clear(&L):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_Send(&L;&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_Date(&L;&D;&H;&I;&I;&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_Host(&L;&S;&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_To(&L;&U;&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_Cc(&L;&U;&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_Bcc(&L;&U;&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_From(&L;&U;&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_ReplyTo(&L;&U;&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_InReplyTo(&L;&U;&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_Sender(&L;&U;&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_Subject(&L;&U;&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_Comments(&L;&U;&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_Body(&L;&U;&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_References(&L;&U;&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_Encrypted(&L;&U;&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_AddHeader(&L;&S;&U;&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_Attachment(&L;&U;&I;&I;&U;&U):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_GetPrefs(&I;&I;&L):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_SetPrefs(&I;&I;&L):I"}
-,{"theme":"IC POP3 Review Mail","syntax":"POP3_Login(&S;&S;&S;&I;&L;&I):I"}
-,{"theme":"IC POP3 Review Mail","syntax":"POP3_Logout(&L):I"}
-,{"theme":"IC POP3 Review Mail","syntax":"POP3_BoxInfo(&L;&L;&L):I"}
-,{"theme":"IC POP3 Review Mail","syntax":"POP3_Delete(&L;&L;&L):I"}
-,{"theme":"IC POP3 Review Mail","syntax":"POP3_Reset(&L):I"}
-,{"theme":"IC POP3 Review Mail","syntax":"POP3_MsgInfo(&L;&L;&L;&S):I"}
-,{"theme":"IC POP3 Review Mail","syntax":"POP3_MsgLstInfo(&L;&L;&L;&Y;&Y;&Y):I"}
-,{"theme":"IC POP3 Review Mail","syntax":"POP3_GetMessage(&L;&L;&L;&L;&T):I"}
-,{"theme":"IC POP3 Review Mail","syntax":"POP3_MsgLst(&L;&L;&L;&Y;&Y;&Y;&Y):I"}
-,{"theme":"IC POP3 Review Mail","syntax":"POP3_VerifyID(&L):I"}
-,{"theme":"IC POP3 Review Mail","syntax":"POP3_UIDToNum(&L;&S;&L):I"}
-,{"theme":"IC POP3 Review Mail","syntax":"POP3_Download(&L;&L;&I;&U):I"}
-,{"theme":"IC Downloaded Mail","syntax":"MSG_HasAttach(&U;&I):I"}
-,{"theme":"IC Downloaded Mail","syntax":"MSG_FindHeader(&U;&S;&T):I"}
-,{"theme":"IC Downloaded Mail","syntax":"MSG_MessageSize(&U;&L;&L;&L):I"}
-,{"theme":"IC Downloaded Mail","syntax":"MSG_GetHeaders(&U;&L;&L;&T):I"}
-,{"theme":"IC Downloaded Mail","syntax":"MSG_GetBody(&U;&L;&L;&U):I"}
-,{"theme":"IC Downloaded Mail","syntax":"MSG_GetMessage(&U;&L;&L;&U):I"}
-,{"theme":"IC Downloaded Mail","syntax":"MSG_Extract(&U;&I;&U;&Y):I"}
-,{"theme":"IC Downloaded Mail","syntax":"MSG_Delete(&U;&I):I"}
-,{"theme":"IC POP3 Review Mail","syntax":"POP3_GetPrefs(&I;&U;&U):I"}
-,{"theme":"IC POP3 Review Mail","syntax":"POP3_SetPrefs(&I;&U;&U):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_Login(&S;&S;&S;&L;&U):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_Logout(&L):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_Receive(&L;&U;&U;&I):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_Send(&L;&U;&U;&I):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_Progress(&I;&I;&S;&S;&S):I"}
-,{"theme":"IC Internet","syntax":"NET_Finger(&S;&S;&T):I"}
-,{"theme":"IC Internet","syntax":"NET_Ping(&S;&T;&I;&I):I"}
-,{"theme":"IC Internet","syntax":"NET_Time(&S;&D;&L;&I):I"}
-,{"theme":"IC Utilities","syntax":"IT_ErrorText(&I):S"}
-,{"theme":"IC Utilities","syntax":"IT_Encode(&U;&U;&I):I"}
-,{"theme":"IC Utilities","syntax":"IT_Decode(&U;&U;&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_Keywords(&L;&T;&I):I"}
-,{"theme":"IC Utilities","syntax":"IT_GetTimeOut(&I):I"}
-,{"theme":"IC Utilities","syntax":"IT_SetTimeOut(&I):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_GetFileInfo(&L;&U;&L;&D;&H):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_GetDirList(&L;&U;&Y;&Y;&Y;&Y;&Y):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_VerifyID(&L):I"}
-,{"theme":"IC Utilities","syntax":"IT_Version:S"}
-,{"theme":"IC Utilities","syntax":"IT_Platform:I"}
-,{"theme":"IC Utilities","syntax":"IT_MacTCPInit:I"}
-,{"theme":"IC Utilities","syntax":"IT_TCPversion(&I;&S):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_MacBinary(&L;&I):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_Delete(&L;&U):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_MakeDir(&L;&U):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_RemoveDir(&L;&U):I"}
-,{"theme":"IC Utilities","syntax":"IT_GetProxy(&I;&I;&S;&I;&T):I"}
-,{"theme":"IC Utilities","syntax":"IT_SetProxy(&I;&I;&S;&I;&T):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_Rename(&L;&U;&U):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_Append(&L;&U;&U;&I):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_GetType(&L;&S):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_SetType(&L;&S):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_System(&L;&S):I"}
-,{"theme":"IC Utilities","syntax":"IT_GetPort(&I;&I):I"}
-,{"theme":"IC Utilities","syntax":"IT_SetPort(&I;&I):I"}
-,{"theme":"IC POP3 Review Mail","syntax":"POP3_Charset(&I;&I):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_Charset(&I;&I):I"}
-,{"theme":"IC TCP/IP","syntax":"TCP_ReceiveBLOB(&L;&O):I"}
-,{"theme":"IC TCP/IP","syntax":"TCP_SendBLOB(&L;&O):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_ChangeDir(&L;&U):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_PrintDir(&L;&U):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_SetPassive(&L;&I):I"}
-,{"theme":"IC File Transfer","syntax":"FTP_GetPassive(&L;&I):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_GetPrefs(&I;&U):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_SetPrefs(&I;&U):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_Login(&S;&S;&S;&L;&I):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_Logout(&L):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_Capability(&L;&T):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_SetCurrentMB(&L;&T;&L;&L;&T;&T;&L):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_MsgLstInfo(&L;&L;&L;&Y;&Y;&Y):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_MsgLst(&L;&L;&L;&Y;&Y;&Y;&Y):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_GetMessage(&L;&L;&L;&L;&I;&U;&I):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_Download(&L;&L;&I;&U;&I):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_GetFlags(&L;&L;&L;&Y;&Y):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_SetFlags(&L;&L;&L;&T;&I):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_Delete(&L;&L;&L):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_Search(&L;&T;&Y):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_CopyToMB(&L;&L;&L;&T;&I):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_CreateMB(&L;&T):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_DeleteMB(&L;&T):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_RenameMB(&L;&T;&T):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_SubscribeMB(&L;&T;&I):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_ListMBs(&L;&T;&T;&Y;&Y;&Y;&I):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_VerifyID(&L):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_GetMBStatus(&L;&T;&L;&L;&L;&L):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_GetCurrentMB(&L;&T):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_CloseCurrentMB(&L):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_MsgNumToUID(&L;&L;&L):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_UIDToMsgNum(&L;&L;&L):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_MsgInfo(&L;&L;&L;&L):I"}
-,{"theme":"IC IMAP Review Mail","syntax":"IMAP_MsgFetch(&L;&L;&T;&T):I"}
-,{"theme":"IC Downloaded Mail","syntax":"MSG_Charset(&I;&I):I"}
-,{"theme":"IC Downloaded Mail","syntax":"MSG_GetPrefs(&I;&U;&U):I"}
-,{"theme":"IC Downloaded Mail","syntax":"MSG_SetPrefs(&I;&U;&U):I"}
-,{"theme":"IC Utilities","syntax":"IT_PPPConnect(&S):I"}
-,{"theme":"IC Utilities","syntax":"IT_PPPDisconnect(&S):I"}
-,{"theme":"IC Utilities","syntax":"IT_PPPStatus(&S):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_Auth(&L;&S;&S;&I):I"}
-,{"theme":"IC UDP","syntax":"UDP_New(&I;&L):I"}
-,{"theme":"IC UDP","syntax":"UDP_Delete(&L):I"}
-,{"theme":"IC UDP","syntax":"UDP_SendTo(&L;&S;&I;&T):I"}
-,{"theme":"IC UDP","syntax":"UDP_SendBLOBTo(&L;&S;&I;&O):I"}
-,{"theme":"IC UDP","syntax":"UDP_ReceiveFrom(&L;&S;&I;&T):I"}
-,{"theme":"IC UDP","syntax":"UDP_ReceiveBLOBFrom(&L;&S;&I;&O):I"}
-,{"theme":"IC Send Mail","syntax":"SMTP_MessageID(&L;&T;&I):I"}
-]}
diff --git a/Plugins/4D InternetCommands.bundle/Contents/Windows64/4D InternetCommands.4DX b/Plugins/4D InternetCommands.bundle/Contents/Windows64/4D InternetCommands.4DX
deleted file mode 100644
index beb8947..0000000
Binary files a/Plugins/4D InternetCommands.bundle/Contents/Windows64/4D InternetCommands.4DX and /dev/null differ
diff --git a/Plugins/4D InternetCommands.bundle/Contents/Windows64/4D_InternetCommands_Dbg.exp b/Plugins/4D InternetCommands.bundle/Contents/Windows64/4D_InternetCommands_Dbg.exp
deleted file mode 100644
index 0721a96..0000000
Binary files a/Plugins/4D InternetCommands.bundle/Contents/Windows64/4D_InternetCommands_Dbg.exp and /dev/null differ
diff --git a/Plugins/4D InternetCommands.bundle/Contents/Windows64/4D_InternetCommands_Dbg.lib b/Plugins/4D InternetCommands.bundle/Contents/Windows64/4D_InternetCommands_Dbg.lib
deleted file mode 100644
index 6caf598..0000000
Binary files a/Plugins/4D InternetCommands.bundle/Contents/Windows64/4D_InternetCommands_Dbg.lib and /dev/null differ
diff --git a/Plugins/4D InternetCommands.bundle/Contents/Windows64/concrt140.dll b/Plugins/4D InternetCommands.bundle/Contents/Windows64/concrt140.dll
deleted file mode 100644
index 235eced..0000000
Binary files a/Plugins/4D InternetCommands.bundle/Contents/Windows64/concrt140.dll and /dev/null differ
diff --git a/Plugins/4D InternetCommands.bundle/Contents/Windows64/msvcp140.dll b/Plugins/4D InternetCommands.bundle/Contents/Windows64/msvcp140.dll
deleted file mode 100644
index 0a50239..0000000
Binary files a/Plugins/4D InternetCommands.bundle/Contents/Windows64/msvcp140.dll and /dev/null differ
diff --git a/Plugins/4D InternetCommands.bundle/Contents/Windows64/msvcp140_1.dll b/Plugins/4D InternetCommands.bundle/Contents/Windows64/msvcp140_1.dll
deleted file mode 100644
index 02ae0f8..0000000
Binary files a/Plugins/4D InternetCommands.bundle/Contents/Windows64/msvcp140_1.dll and /dev/null differ
diff --git a/Plugins/4D InternetCommands.bundle/Contents/Windows64/msvcp140_2.dll b/Plugins/4D InternetCommands.bundle/Contents/Windows64/msvcp140_2.dll
deleted file mode 100644
index 3283732..0000000
Binary files a/Plugins/4D InternetCommands.bundle/Contents/Windows64/msvcp140_2.dll and /dev/null differ
diff --git a/Plugins/4D InternetCommands.bundle/Contents/Windows64/msvcp140_atomic_wait.dll b/Plugins/4D InternetCommands.bundle/Contents/Windows64/msvcp140_atomic_wait.dll
deleted file mode 100644
index 2ca26ca..0000000
Binary files a/Plugins/4D InternetCommands.bundle/Contents/Windows64/msvcp140_atomic_wait.dll and /dev/null differ
diff --git a/Plugins/4D InternetCommands.bundle/Contents/Windows64/msvcp140_codecvt_ids.dll b/Plugins/4D InternetCommands.bundle/Contents/Windows64/msvcp140_codecvt_ids.dll
deleted file mode 100644
index 8eb1254..0000000
Binary files a/Plugins/4D InternetCommands.bundle/Contents/Windows64/msvcp140_codecvt_ids.dll and /dev/null differ
diff --git a/Plugins/4D InternetCommands.bundle/Contents/Windows64/vccorlib140.dll b/Plugins/4D InternetCommands.bundle/Contents/Windows64/vccorlib140.dll
deleted file mode 100644
index b0eff49..0000000
Binary files a/Plugins/4D InternetCommands.bundle/Contents/Windows64/vccorlib140.dll and /dev/null differ
diff --git a/Plugins/4D InternetCommands.bundle/Contents/Windows64/vcruntime140.dll b/Plugins/4D InternetCommands.bundle/Contents/Windows64/vcruntime140.dll
deleted file mode 100644
index 524092d..0000000
Binary files a/Plugins/4D InternetCommands.bundle/Contents/Windows64/vcruntime140.dll and /dev/null differ
diff --git a/Plugins/4D InternetCommands.bundle/Contents/Windows64/vcruntime140_1.dll b/Plugins/4D InternetCommands.bundle/Contents/Windows64/vcruntime140_1.dll
deleted file mode 100644
index 4e3760e..0000000
Binary files a/Plugins/4D InternetCommands.bundle/Contents/Windows64/vcruntime140_1.dll and /dev/null differ
diff --git a/Plugins/4D InternetCommands.bundle/Contents/Windows64/vcruntime140_threads.dll b/Plugins/4D InternetCommands.bundle/Contents/Windows64/vcruntime140_threads.dll
deleted file mode 100644
index c01bb8a..0000000
Binary files a/Plugins/4D InternetCommands.bundle/Contents/Windows64/vcruntime140_threads.dll and /dev/null differ
diff --git a/Plugins/4D InternetCommands.bundle/Contents/_CodeSignature/CodeResources b/Plugins/4D InternetCommands.bundle/Contents/_CodeSignature/CodeResources
deleted file mode 100644
index b9fd5d1..0000000
--- a/Plugins/4D InternetCommands.bundle/Contents/_CodeSignature/CodeResources
+++ /dev/null
@@ -1,312 +0,0 @@
-
-
-
-
- files
-
- Resources/constants.xlf
-
- q8+fNrUQ0eruDV6nD7aeeIyZNM4=
-
- Resources/en.lproj/InfoPlist.strings
-
- hash
-
- hxdIPaPYuGcktAbiua5HGz8YO54=
-
- optional
-
-
- Resources/manifest.json
-
- ava6bpq4zV0mPvjJZZEy7Y6zPhU=
-
-
- files2
-
- Resources/constants.xlf
-
- hash
-
- q8+fNrUQ0eruDV6nD7aeeIyZNM4=
-
- hash2
-
- FQaXuythWjgcd97iEd3fpq/cmcjQS8+yIpkryJ18fhE=
-
-
- Resources/en.lproj/InfoPlist.strings
-
- hash
-
- hxdIPaPYuGcktAbiua5HGz8YO54=
-
- hash2
-
- CxzzrrN6OVTHkvKvVkTuqiYcfoubC6kswqASfcC8y4Y=
-
- optional
-
-
- Resources/manifest.json
-
- hash
-
- ava6bpq4zV0mPvjJZZEy7Y6zPhU=
-
- hash2
-
- UOD4EivxweC4lNaKtzHXv7yxS2BbbNa5tPXspaKHf4I=
-
-
- Windows64/4D InternetCommands.4DX
-
- hash
-
- v7mfItrwTddVbdn2b0mEhJXWJk8=
-
- hash2
-
- JQU3wjInlfAX2owqcbHqVBQrxj4W1Ak76aHTOyUjiTo=
-
-
- Windows64/4D_InternetCommands_Dbg.exp
-
- hash
-
- 3l/ufyOQ/+1C6h6ecJcMTK0W7QQ=
-
- hash2
-
- Ro64NikScyAMO8+Y+XkDvfVqhD8eBlugXhnRv2jryCI=
-
-
- Windows64/4D_InternetCommands_Dbg.lib
-
- hash
-
- ty8+Q9froZRerx2FSjA4yWC6w2I=
-
- hash2
-
- ZTfO01u19xFePeuInZrKN2Cms6R2V+h3SsGTQAJf6KI=
-
-
- Windows64/concrt140.dll
-
- hash
-
- 6GpKcUtyizrnMicFUbupQaNwCGg=
-
- hash2
-
- T1AJkqU8QaC6RKEcM8SB2HY1BadFO+EthRB4VquPszI=
-
-
- Windows64/msvcp140.dll
-
- hash
-
- jmoCV1keuROufQ6XXFYwaz9oCz8=
-
- hash2
-
- pMIim9wqKmMKzcCVtNhgCOXD47x3cxdDVPPaT1vrnN4=
-
-
- Windows64/msvcp140_1.dll
-
- hash
-
- WyUtEBONZmaJLKnaHh2VryTeEJc=
-
- hash2
-
- kc0FwWxhw5eIxHQ0YCpZwX9bCNuz7uBM6F+NW3Do5gQ=
-
-
- Windows64/msvcp140_2.dll
-
- hash
-
- taby0At5A8+PTS/yaYDirmEq3h4=
-
- hash2
-
- cT8XslPYAtKD0wbOdWR+N9g6VGrrGogeXZ5SnoVsAH4=
-
-
- Windows64/msvcp140_atomic_wait.dll
-
- hash
-
- pC8ET6DSENfpYHji1v/gdTr9OHo=
-
- hash2
-
- rt5OxFSoLxRutKch5hbiCGhwEH2IqrxrC9HuoKUF2TU=
-
-
- Windows64/msvcp140_codecvt_ids.dll
-
- hash
-
- Y63uIOVABBhydf9gIOge7To7F/c=
-
- hash2
-
- 1S00n7vmq8YZZcB+BMyC2O4M6h3n+vkKg4lk4/QKzt0=
-
-
- Windows64/vccorlib140.dll
-
- hash
-
- zDcZ/2vtEQcJH0fWmF60MEwtcws=
-
- hash2
-
- CG+riszONX2kmeYCTkKQqonfwhmGfJDZDGL4JHWRuVs=
-
-
- Windows64/vcruntime140.dll
-
- hash
-
- SBLaXrhqk/sK3Fu2CkmA7osK0zo=
-
- hash2
-
- AsaqDm5iRBGp8ZsDYKeGWrFZCOJgJFEOXDipwINiw1o=
-
-
- Windows64/vcruntime140_1.dll
-
- hash
-
- 36ekYBJIODf0fYyHCXOi3qeG2f8=
-
- hash2
-
- fdmqAuJxxoym1fGNZR0joV1yWXFa9DMmV4993ifzdjc=
-
-
- Windows64/vcruntime140_threads.dll
-
- hash
-
- h8YQSaUy3TY2iFUvsJAaFky6VQw=
-
- hash2
-
- dfNUDr4IdsGxc4IdJmmYfAiMP225hTBdFgRg9HZTaok=
-
-
-
- rules
-
- ^Resources/
-
- ^Resources/.*\.lproj/
-
- optional
-
- weight
- 1000
-
- ^Resources/.*\.lproj/locversion.plist$
-
- omit
-
- weight
- 1100
-
- ^Resources/Base\.lproj/
-
- weight
- 1010
-
- ^version.plist$
-
-
- rules2
-
- .*\.dSYM($|/)
-
- weight
- 11
-
- ^(.*/)?\.DS_Store$
-
- omit
-
- weight
- 2000
-
- ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/
-
- nested
-
- weight
- 10
-
- ^.*
-
- ^Info\.plist$
-
- omit
-
- weight
- 20
-
- ^PkgInfo$
-
- omit
-
- weight
- 20
-
- ^Resources/
-
- weight
- 20
-
- ^Resources/.*\.lproj/
-
- optional
-
- weight
- 1000
-
- ^Resources/.*\.lproj/locversion.plist$
-
- omit
-
- weight
- 1100
-
- ^Resources/Base\.lproj/
-
- weight
- 1010
-
- ^[^/]+$
-
- nested
-
- weight
- 10
-
- ^embedded\.provisionprofile$
-
- weight
- 20
-
- ^version\.plist$
-
- weight
- 20
-
-
-
-
diff --git a/Project/Sources/Classes/Alarm_Server.4dm b/Project/Sources/Classes/Alarm_Server.4dm
new file mode 100644
index 0000000..ab869bb
--- /dev/null
+++ b/Project/Sources/Classes/Alarm_Server.4dm
@@ -0,0 +1,31 @@
+property activated : Boolean
+
+Class extends TCPConnectionOption
+
+Class constructor($port : Integer)
+
+ Super:C1705($port)
+
+ This:C1470.activated:=False:C215
+
+Function onData($connection : 4D:C1709.TCPConnection; $event : 4D:C1709.TCPEvent)
+
+ var $data : 4D:C1709.Blob
+ $data:=$event.data
+
+ var $text : Text
+ $text:=Convert to text:C1012($data; "utf-8")
+
+ If ($text="Information")
+ If (This:C1470.activated)
+ $text:="Alarm\r\n is on! Nothing to report."
+ Else
+ $text:="Alarm is off! You should turn it on."
+ End if
+ CONVERT FROM TEXT:C1011($text; "utf-8"; $data)
+ $connection.send($data)
+ Else
+ If ($text="Activate")
+ This:C1470.activated:=Not:C34(This:C1470.activated)
+ End if
+ End if
\ No newline at end of file
diff --git a/Project/Sources/Classes/HouseDevice.4dm b/Project/Sources/Classes/HouseDevice.4dm
index 08fe2f8..fcd3f72 100644
--- a/Project/Sources/Classes/HouseDevice.4dm
+++ b/Project/Sources/Classes/HouseDevice.4dm
@@ -1,3 +1,7 @@
+property connection : 4D:C1709.TCPConnection
+property form : Object
+property port : Integer
+
Class constructor($form : Object; $port : Integer)
This:C1470.form:=$form
@@ -7,13 +11,15 @@ Class constructor($form : Object; $port : Integer)
//Connects to one of the servers launched inside workers
Function connect()
- This:C1470.connection:=4D:C1709.TCPConnection.new("localhost"; This:C1470.port; This:C1470)
+ This:C1470.connection:=This:C1470.connection=Null:C1517 ? 4D:C1709.TCPConnection.new("localhost"; This:C1470.port; This:C1470) : This:C1470.connection
//Disconnect from the server
Function disconnect()
- This:C1470.connection.shutdown()
- This:C1470.connection:=Null:C1517
+ If (This:C1470.connection#Null:C1517)
+ This:C1470.connection.shutdown()
+ This:C1470.connection:=Null:C1517
+ End if
//Send a blob to the server, the server always answer with a text to show to the user
Function getInfo()
@@ -67,6 +73,8 @@ Function onError($connection : 4D:C1709.TCPConnection; $event : 4D:C1709.TCPEven
OBJECT SET ENABLED:C1123(*; "ButtonActivate"; False:C215)
OBJECT SET ENABLED:C1123(*; "ButtonDisconnect"; False:C215)
+ This:C1470.connection:=Null:C1517
+
//Callback called after onShutdown/onError just before the TCPConnection object is released
Function onTerminate($connection : 4D:C1709.TCPConnection; $event : 4D:C1709.TCPEvent)
\ No newline at end of file
diff --git a/Project/Sources/Classes/Lightbulb_Server.4dm b/Project/Sources/Classes/Lightbulb_Server.4dm
new file mode 100644
index 0000000..3e8cff2
--- /dev/null
+++ b/Project/Sources/Classes/Lightbulb_Server.4dm
@@ -0,0 +1,31 @@
+property activated : Boolean
+
+Class extends TCPConnectionOption
+
+Class constructor($port : Integer)
+
+ Super:C1705($port)
+
+ This:C1470.activated:=False:C215
+
+Function onData($connection : 4D:C1709.TCPConnection; $event : 4D:C1709.TCPEvent)
+
+ var $data : 4D:C1709.Blob
+ $data:=$event.data
+
+ var $text : Text
+ $text:=Convert to text:C1012($data; "utf-8")
+
+ If ($text="Information")
+ If (This:C1470.activated)
+ $text:="Light is on!"
+ Else
+ $text:="Light is off!"
+ End if
+ CONVERT FROM TEXT:C1011($text; "utf-8"; $data)
+ $connection.send($data)
+ Else
+ If ($text="Activate")
+ This:C1470.activated:=Not:C34(This:C1470.activated)
+ End if
+ End if
\ No newline at end of file
diff --git a/Project/Sources/Classes/Music_Server.4dm b/Project/Sources/Classes/Music_Server.4dm
new file mode 100644
index 0000000..1bd36d2
--- /dev/null
+++ b/Project/Sources/Classes/Music_Server.4dm
@@ -0,0 +1,31 @@
+property activated : Boolean
+
+Class extends TCPConnectionOption
+
+Class constructor($port : Integer)
+
+ Super:C1705($port)
+
+ This:C1470.activated:=False:C215
+
+Function onData($connection : 4D:C1709.TCPConnection; $event : 4D:C1709.TCPEvent)
+
+ var $data : 4D:C1709.Blob
+ $data:=$event.data
+
+ var $text : Text
+ $text:=Convert to text:C1012($data; "utf-8")
+
+ If ($text="Information")
+ If (This:C1470.activated)
+ $text:="Music is playing but no one is listening..."
+ Else
+ $text:="Music is not playing!"
+ End if
+ CONVERT FROM TEXT:C1011($text; "utf-8"; $data)
+ $connection.send($data)
+ Else
+ If ($text="Activate")
+ This:C1470.activated:=Not:C34(This:C1470.activated)
+ End if
+ End if
\ No newline at end of file
diff --git a/Project/Sources/Classes/Plant_Server.4dm b/Project/Sources/Classes/Plant_Server.4dm
new file mode 100644
index 0000000..2ecf50e
--- /dev/null
+++ b/Project/Sources/Classes/Plant_Server.4dm
@@ -0,0 +1,49 @@
+property activated : Boolean
+property info : Integer
+
+Class extends TCPConnectionOption
+
+Class constructor($port : Integer)
+
+ Super:C1705($port)
+
+ This:C1470.activated:=False:C215
+ This:C1470.info:=1
+
+Function onData($connection : 4D:C1709.TCPConnection; $event : 4D:C1709.TCPEvent)
+
+ var $data : 4D:C1709.Blob
+ $data:=$event.data
+
+ var $text : Text
+ $text:=Convert to text:C1012($data; "utf-8")
+
+ If ($text="Information")
+ If (This:C1470.activated)
+ $text:="You need to learn more about biology..."
+ Else
+ If (This:C1470.info=1)
+ $text:="It grows!"
+ End if
+ If (This:C1470.info=2)
+ $text:="It still grows!"
+ End if
+ If (This:C1470.info=3)
+ $text:="Still growing!"
+ End if
+ If (This:C1470.info=4)
+ $text:="What do you expect?"
+ End if
+ If (This:C1470.info=5)
+ $text:="Reset in progress..."
+ This:C1470.info:=0
+ End if
+ This:C1470.info+=1
+ End if
+ CONVERT FROM TEXT:C1011($text; "utf-8"; $data)
+ $connection.send($data)
+ Else
+ If ($text="Activate")
+ This:C1470.activated:=Not:C34(This:C1470.activated)
+ End if
+ End if
\ No newline at end of file
diff --git a/Project/Sources/Classes/TCPConnectionOption.4dm b/Project/Sources/Classes/TCPConnectionOption.4dm
new file mode 100644
index 0000000..b4ab900
--- /dev/null
+++ b/Project/Sources/Classes/TCPConnectionOption.4dm
@@ -0,0 +1,21 @@
+property listener : 4D:C1709.TCPListener
+property noDelay : Boolean
+
+Class constructor($port : Integer)
+
+ This:C1470.noDelay:=False:C215
+
+ var $server : cs:C1710.TCPListenerOption
+ $server:=cs:C1710.TCPListenerOption.new(This:C1470)
+ This:C1470.listener:=4D:C1709.TCPListener.new($port; $server)
+
+Function onConnection($connection : 4D:C1709.TCPConnection; $event : 4D:C1709.TCPEvent)
+
+Function onData($connection : 4D:C1709.TCPConnection; $event : 4D:C1709.TCPEvent)
+
+Function onShutdown($connection : 4D:C1709.TCPConnection; $event : 4D:C1709.TCPEvent)
+
+Function onError($connection : 4D:C1709.TCPConnection; $event : 4D:C1709.TCPEvent)
+
+Function onTerminate($connection : 4D:C1709.TCPConnection; $event : 4D:C1709.TCPEvent)
+
\ No newline at end of file
diff --git a/Project/Sources/Classes/TCPListenerOption.4dm b/Project/Sources/Classes/TCPListenerOption.4dm
new file mode 100644
index 0000000..e217fda
--- /dev/null
+++ b/Project/Sources/Classes/TCPListenerOption.4dm
@@ -0,0 +1,15 @@
+property server : Object
+
+Class constructor($server : cs:C1710.TCPConnectionOption)
+
+ This:C1470.server:=$server
+
+Function onConnection($listener : 4D:C1709.TCPListener; $event : 4D:C1709.TCPEvent) : Object
+
+ return This:C1470.server
+
+Function onError($listener : 4D:C1709.TCPListener; $event : 4D:C1709.TCPEvent)
+
+Function onTerminate($listener : 4D:C1709.TCPListener; $event : 4D:C1709.TCPEvent)
+
+ KILL WORKER:C1390
\ No newline at end of file
diff --git a/Project/Sources/Classes/Thermometer_Server.4dm b/Project/Sources/Classes/Thermometer_Server.4dm
new file mode 100644
index 0000000..8fee2d2
--- /dev/null
+++ b/Project/Sources/Classes/Thermometer_Server.4dm
@@ -0,0 +1,34 @@
+property activated : Boolean
+property temperature : Integer
+
+Class extends TCPConnectionOption
+
+Class constructor($port : Integer)
+
+ Super:C1705($port)
+
+ This:C1470.activated:=False:C215
+ This:C1470.temperature:=10
+
+Function onData($connection : 4D:C1709.TCPConnection; $event : 4D:C1709.TCPEvent)
+
+ var $data : 4D:C1709.Blob
+ $data:=$event.data
+
+ var $text : Text
+ $text:=Convert to text:C1012($data; "utf-8")
+
+ If ($text="Information")
+ If (This:C1470.activated)
+ This:C1470.temperature+=1
+ Else
+ This:C1470.temperature-=1
+ End if
+ $text:="Temperature is "+String:C10(This:C1470.temperature)+" degree Celsius"
+ CONVERT FROM TEXT:C1011($text; "utf-8"; $data)
+ $connection.send($data)
+ Else
+ If ($text="Activate")
+ This:C1470.activated:=Not:C34(This:C1470.activated)
+ End if
+ End if
\ No newline at end of file
diff --git a/Project/Sources/Forms/HDI2/ObjectMethods/BtnOK.4dm b/Project/Sources/Forms/HDI2/ObjectMethods/BtnOK.4dm
index 134c3f4..322f820 100644
--- a/Project/Sources/Forms/HDI2/ObjectMethods/BtnOK.4dm
+++ b/Project/Sources/Forms/HDI2/ObjectMethods/BtnOK.4dm
@@ -1,9 +1,18 @@
+var $event : Object
+$event:=FORM Event:C1606
Case of
- : (Form event code:C388=On Clicked:K2:4)
- If (Is Windows:C1573 && Get application info:C1599().SDIMode)
- INVOKE ACTION:C1439(ak return to design mode:K76:62)
- Else
- CANCEL:C270
- End if
+ : ($event.code=On Clicked:K2:4)
+
+ Case of
+ : (FORM Get current page:C276=1)
+
+ FORM GOTO PAGE:C247(2)
+
+ : (FORM Get current page:C276=2)
+
+ CANCEL:C270
+
+ End case
+
End case
\ No newline at end of file
diff --git a/Project/Sources/Forms/HDI2/ObjectMethods/OpenLog.4dm b/Project/Sources/Forms/HDI2/ObjectMethods/OpenLog.4dm
index ef9c01e..910b536 100644
--- a/Project/Sources/Forms/HDI2/ObjectMethods/OpenLog.4dm
+++ b/Project/Sources/Forms/HDI2/ObjectMethods/OpenLog.4dm
@@ -1,2 +1,3 @@
+var $file : 4D:C1709.File
$file:=File:C1566("/LOGS/4DTCPLog_1.txt")
OPEN URL:C673($file.platformPath)
diff --git a/Project/Sources/Forms/HDI2/ObjectMethods/StartServers.4dm b/Project/Sources/Forms/HDI2/ObjectMethods/StartServers.4dm
index c7dd320..97160f0 100644
--- a/Project/Sources/Forms/HDI2/ObjectMethods/StartServers.4dm
+++ b/Project/Sources/Forms/HDI2/ObjectMethods/StartServers.4dm
@@ -1,5 +1,26 @@
-CALL WORKER:C1389("4D_Lightbulb_Server"; Formula:C1597(4D_Lightbulb_Server))
-CALL WORKER:C1389("4D_Thermometer_Server"; Formula:C1597(4D_Thermometer_Server))
-CALL WORKER:C1389("4D_Alarm_Server"; Formula:C1597(4D_Alarm_Server))
-CALL WORKER:C1389("4D_Music_Server"; Formula:C1597(4D_Music_Server))
-CALL WORKER:C1389("4D_Plant_Server"; Formula:C1597(4D_Plant_Server))
\ No newline at end of file
+If (FORM Event:C1606.code=On Clicked:K2:4)
+
+ var $workers : Collection
+ $workers:=Process activity:C1495(Processes only:K5:35).processes.query("type = :1"; Worker process:K36:32).extract("name")
+
+ If ($workers.indexOf("4D_Lightbulb_Server")=-1)
+ CALL WORKER:C1389("4D_Lightbulb_Server"; Formula:C1597(4D_Lightbulb_Server); Form:C1466.lightBulb.port)
+ End if
+
+ If ($workers.indexOf("4D_Thermometer_Server")=-1)
+ CALL WORKER:C1389("4D_Thermometer_Server"; Formula:C1597(4D_Thermometer_Server); Form:C1466.thermometer.port)
+ End if
+
+ If ($workers.indexOf("4D_Alarm_Server")=-1)
+ CALL WORKER:C1389("4D_Alarm_Server"; Formula:C1597(4D_Alarm_Server); Form:C1466.alarm.port)
+ End if
+
+ If ($workers.indexOf("4D_Music_Server")=-1)
+ CALL WORKER:C1389("4D_Music_Server"; Formula:C1597(4D_Music_Server); Form:C1466.music.port)
+ End if
+
+ If ($workers.indexOf("4D_Plant_Server")=-1)
+ CALL WORKER:C1389("4D_Plant_Server"; Formula:C1597(4D_Plant_Server); Form:C1466.plant.port)
+ End if
+
+End if
\ No newline at end of file
diff --git a/Project/Sources/Forms/HDI2/form.4DForm b/Project/Sources/Forms/HDI2/form.4DForm
index babfbb0..3811055 100644
--- a/Project/Sources/Forms/HDI2/form.4DForm
+++ b/Project/Sources/Forms/HDI2/form.4DForm
@@ -13,7 +13,7 @@
"markerFooter": 240,
"events": [
"onLoad",
- "onCloseBox"
+ "onUnload"
],
"method": "method.4dm",
"pageFormat": {
@@ -212,7 +212,8 @@
"events": [
"onClick"
],
- "method": "ObjectMethods/ButtonConnect.4dm"
+ "method": "ObjectMethods/ButtonConnect.4dm",
+ "focusable": false
},
"ButtonInfo": {
"type": "button",
@@ -224,7 +225,8 @@
"events": [
"onClick"
],
- "method": "ObjectMethods/ButtonInfo.4dm"
+ "method": "ObjectMethods/ButtonInfo.4dm",
+ "focusable": false
},
"ButtonActivate": {
"type": "button",
@@ -236,7 +238,8 @@
"events": [
"onClick"
],
- "method": "ObjectMethods/ButtonActivate.4dm"
+ "method": "ObjectMethods/ButtonActivate.4dm",
+ "focusable": false
},
"ButtonDisconnect": {
"type": "button",
@@ -248,7 +251,8 @@
"events": [
"onClick"
],
- "method": "ObjectMethods/ButtonDisconnect.4dm"
+ "method": "ObjectMethods/ButtonDisconnect.4dm",
+ "focusable": false
},
"StartServers": {
"type": "button",
@@ -260,7 +264,8 @@
"events": [
"onClick"
],
- "method": "ObjectMethods/StartServers.4dm"
+ "method": "ObjectMethods/StartServers.4dm",
+ "focusable": false
},
"OpenLog": {
"type": "button",
@@ -272,7 +277,8 @@
"events": [
"onClick"
],
- "method": "ObjectMethods/OpenLog.4dm"
+ "method": "ObjectMethods/OpenLog.4dm",
+ "focusable": false
}
}
}
diff --git a/Project/Sources/Forms/HDI2/method.4dm b/Project/Sources/Forms/HDI2/method.4dm
index c6f54b5..f27aa2e 100644
--- a/Project/Sources/Forms/HDI2/method.4dm
+++ b/Project/Sources/Forms/HDI2/method.4dm
@@ -1,6 +1,8 @@
+var $event : Object
+$event:=FORM Event:C1606
+
Case of
-
- : (Form event code:C388=On Load:K2:1)
+ : ($event.code=On Load:K2:1)
InitInfo
@@ -10,12 +12,22 @@ Case of
Form:C1466.music:=cs:C1710.HouseDevice.new(Form:C1466; 19823)
Form:C1466.plant:=cs:C1710.HouseDevice.new(Form:C1466; 19824)
- : (Form event code:C388=On Close Box:K2:21)
- If (Is Windows:C1573 && Application info:C1599().SDIMode)
- QUIT 4D:C291
- Else
- CANCEL:C270
- End if
+ OBJECT SET ENABLED:C1123(*; "ButtonConnect"; False:C215)
+ OBJECT SET ENABLED:C1123(*; "ButtonInfo"; False:C215)
+ OBJECT SET ENABLED:C1123(*; "ButtonActivate"; False:C215)
+ OBJECT SET ENABLED:C1123(*; "ButtonDisconnect"; False:C215)
-End case
-
+ : ($event.code=On Unload:K2:2)
+
+ Form:C1466.lightBulb.disconnect()
+ Form:C1466.thermometer.disconnect()
+ Form:C1466.alarm.disconnect()
+ Form:C1466.music.disconnect()
+ Form:C1466.plant.disconnect()
+
+ var $name : Text
+ For each ($name; ["4D_Lightbulb_Server"; "4D_Thermometer_Server"; "4D_Alarm_Server"; "4D_Music_Server"; "4D_Plant_Server"])
+ CALL WORKER:C1389($name; Formula:C1597(terminateServer))
+ End for each
+
+End case
\ No newline at end of file
diff --git a/Project/Sources/Methods/00_Start.4dm b/Project/Sources/Methods/00_Start.4dm
index b590ecb..45b30e6 100644
--- a/Project/Sources/Methods/00_Start.4dm
+++ b/Project/Sources/Methods/00_Start.4dm
@@ -1,8 +1,9 @@
//%attributes = {}
-C_LONGINT:C283($1)
-C_LONGINT:C283($ps; $win)
-C_OBJECT:C1216($options)
-C_TEXT:C284($cr)
+#DECLARE($p : Integer)
+
+var $ps; $win : Integer
+var $options : Object
+var $cr : Text
Case of
: (Count parameters:C259=0)
@@ -13,7 +14,7 @@ Case of
ALERT:C41("Sorry, this \"How do I\" (HDI) example must be used with a newer version of 4D (v16 R6 and above)"; "Quit")
QUIT 4D:C291
Else
- $ps:=New process:C317(Current method name:C684; 0; Current method name:C684; 0)
+ $ps:=New process:C317(Current method name:C684; 0; Current method name:C684; 0; *)
End if
Else
@@ -33,7 +34,7 @@ Case of
$options.blog:="blog.4d.com"
$options.info:="Using TCPConnection to connect to a server" //ex : "4D View Pro feature"
- $options.minimumVersion:="2080" // 1660 means 16R6 1601 means 16.1 (do not use !)
+ $options.minimumVersion:="2090" // 1660 means 16R6 1601 means 16.1 (do not use !)
// $options.license:=4D View license // IF ANY NEEDED
diff --git a/Project/Sources/Methods/4D_Alarm_Server.4dm b/Project/Sources/Methods/4D_Alarm_Server.4dm
index 22512e1..b765508 100644
--- a/Project/Sources/Methods/4D_Alarm_Server.4dm
+++ b/Project/Sources/Methods/4D_Alarm_Server.4dm
@@ -1,38 +1,9 @@
-//%attributes = {}
-var $vStatus : Integer
-var $TCP_ID : Integer
-var $data : Blob
-var $blob : Blob
+//%attributes = {"invisible":true,"preemptive":"capable"}
+#DECLARE($port : Integer)
-var $activated:=False:C215
+var $server : cs:C1710.TCPConnectionOption
+$server:=cs:C1710.Alarm_Server.new($port)
-Repeat
- $err:=TCP_Listen(""; 0; 19822; 0; $TCP_ID)
- $err:=TCP_State($TCP_ID; $vStatus)
-
- If ($vStatus=8)
- Repeat
- DELAY PROCESS:C323(Current process:C322; 2)
- $err:=TCP_ReceiveBLOB($TCP_ID; $data)
- $err:=TCP_State($TCP_ID; $vStatus)
-
- If (BLOB size:C605($data)#0)
- $text:=BLOB to text:C555($data; 0)
- If ($text="Information")
- If ($activated)
- TEXT TO BLOB:C554("Alarm\r\n is on! Nothing to report."; $blob; UTF8 C string:K22:15)
- Else
- TEXT TO BLOB:C554("Alarm is off! You should turn it on."; $blob; UTF8 C string:K22:15)
- End if
- TCP_SendBLOB($TCP_ID; $blob)
- Else
- If ($text="Activate")
- $activated:=Not:C34($activated)
- End if
- End if
- End if
-
- Until (($vStatus=0) | ($err#0))
- TCP_Close($TCP_ID)
- End if
-Until (False:C215)
\ No newline at end of file
+Use (Storage:C1525)
+ Storage:C1525[Current method name:C684]:=$server.listener
+End use
\ No newline at end of file
diff --git a/Project/Sources/Methods/4D_Lightbulb_Server.4dm b/Project/Sources/Methods/4D_Lightbulb_Server.4dm
index 482f814..3b87862 100644
--- a/Project/Sources/Methods/4D_Lightbulb_Server.4dm
+++ b/Project/Sources/Methods/4D_Lightbulb_Server.4dm
@@ -1,38 +1,9 @@
-//%attributes = {}
-var $vStatus : Integer
-var $TCP_ID : Integer
-var $data : Blob
-var $blob : Blob
+//%attributes = {"invisible":true,"preemptive":"capable"}
+#DECLARE($port : Integer)
-var $activated:=False:C215
+var $server : cs:C1710.TCPConnectionOption
+$server:=cs:C1710.Lightbulb_Server.new($port)
-Repeat
- $err:=TCP_Listen(""; 0; 19820; 0; $TCP_ID)
- $err:=TCP_State($TCP_ID; $vStatus)
-
- If ($vStatus=8)
- DELAY PROCESS:C323(Current process:C322(); 2)
- Repeat
- $err:=TCP_ReceiveBLOB($TCP_ID; $data)
- $err:=TCP_State($TCP_ID; $vStatus)
-
- If (BLOB size:C605($data)#0)
- $text:=BLOB to text:C555($data; 0)
- If ($text="Information")
- If ($activated)
- TEXT TO BLOB:C554("Light is on!"; $blob; UTF8 C string:K22:15)
- Else
- TEXT TO BLOB:C554("Light is off!"; $blob; UTF8 C string:K22:15)
- End if
- TCP_SendBLOB($TCP_ID; $blob)
- Else
- If ($text="Activate")
- $activated:=Not:C34($activated)
- End if
- End if
- End if
-
- Until (($vStatus=0) | ($err#0))
- End if
- TCP_Close($TCP_ID)
-Until (False:C215)
\ No newline at end of file
+Use (Storage:C1525)
+ Storage:C1525[Current method name:C684]:=$server.listener
+End use
\ No newline at end of file
diff --git a/Project/Sources/Methods/4D_Music_Server.4dm b/Project/Sources/Methods/4D_Music_Server.4dm
index 0273ffa..4a94657 100644
--- a/Project/Sources/Methods/4D_Music_Server.4dm
+++ b/Project/Sources/Methods/4D_Music_Server.4dm
@@ -1,39 +1,9 @@
-//%attributes = {}
-var $vStatus : Integer
-var $TCP_ID : Integer
-var $data : Blob
-var $blob : Blob
+//%attributes = {"invisible":true,"preemptive":"capable"}
+#DECLARE($port : Integer)
-var $activated:=False:C215
+var $server : cs:C1710.TCPConnectionOption
+$server:=cs:C1710.Music_Server.new($port)
-Repeat
- $err:=TCP_Listen(""; 0; 19823; 0; $TCP_ID)
- $err:=TCP_State($TCP_ID; $vStatus)
-
- If ($vStatus=8)
- DELAY PROCESS:C323(Current process:C322(); 2)
- Repeat
- $err:=TCP_ReceiveBLOB($TCP_ID; $data)
- $err:=TCP_State($TCP_ID; $vStatus)
-
- If (BLOB size:C605($data)#0)
- $text:=BLOB to text:C555($data; 0)
- If ($text="Information")
- If ($activated)
- TEXT TO BLOB:C554("Music is playing but no one is listening..."; $blob; UTF8 C string:K22:15)
- Else
- TEXT TO BLOB:C554("Music is not playing!"; $blob; UTF8 C string:K22:15)
- End if
- TCP_SendBLOB($TCP_ID; $blob)
- Else
- If ($text="Activate")
- $activated:=Not:C34($activated)
- End if
- End if
- End if
-
- Until (($vStatus=0) | ($err#0))
- End if
-
- TCP_Close($TCP_ID)
-Until (False:C215)
\ No newline at end of file
+Use (Storage:C1525)
+ Storage:C1525[Current method name:C684]:=$server.listener
+End use
\ No newline at end of file
diff --git a/Project/Sources/Methods/4D_Plant_Server.4dm b/Project/Sources/Methods/4D_Plant_Server.4dm
index 8bb7470..26d0bbb 100644
--- a/Project/Sources/Methods/4D_Plant_Server.4dm
+++ b/Project/Sources/Methods/4D_Plant_Server.4dm
@@ -1,55 +1,9 @@
-//%attributes = {}
-var $vStatus : Integer
-var $TCP_ID : Integer
-var $data : Blob
-var $blob : Blob
+//%attributes = {"invisible":true,"preemptive":"capable"}
+#DECLARE($port : Integer)
-var $activated:=False:C215
-var $info:=1
+var $server : cs:C1710.TCPConnectionOption
+$server:=cs:C1710.Plant_Server.new($port)
-Repeat
- $err:=TCP_Listen(""; 0; 19824; 0; $TCP_ID)
- $err:=TCP_State($TCP_ID; $vStatus)
-
- If ($vStatus=8)
- DELAY PROCESS:C323(Current process:C322(); 2)
- Repeat
- $err:=TCP_ReceiveBLOB($TCP_ID; $data)
- $err:=TCP_State($TCP_ID; $vStatus)
-
- If (BLOB size:C605($data)#0)
- $text:=BLOB to text:C555($data; 0)
- If ($text="Information")
- If ($activated)
- TEXT TO BLOB:C554("You need to learn more about biology..."; $blob; UTF8 C string:K22:15)
- Else
- If ($info=1)
- TEXT TO BLOB:C554("It grows!"; $blob; UTF8 C string:K22:15)
- End if
- If ($info=2)
- TEXT TO BLOB:C554("It still grows!"; $blob; UTF8 C string:K22:15)
- End if
- If ($info=3)
- TEXT TO BLOB:C554("Still growing!"; $blob; UTF8 C string:K22:15)
- End if
- If ($info=4)
- TEXT TO BLOB:C554("What do you expect?"; $blob; UTF8 C string:K22:15)
- End if
- If ($info=5)
- TEXT TO BLOB:C554("Reset in progress..."; $blob; UTF8 C string:K22:15)
- $info:=0
- End if
- $info+=1
- End if
- TCP_SendBLOB($TCP_ID; $blob)
- Else
- If ($text="Activate")
- $activated:=Not:C34($activated)
- End if
- End if
- End if
-
- Until (($vStatus=0) | ($err#0))
- End if
- TCP_Close($TCP_ID)
-Until (False:C215)
\ No newline at end of file
+Use (Storage:C1525)
+ Storage:C1525[Current method name:C684]:=$server.listener
+End use
\ No newline at end of file
diff --git a/Project/Sources/Methods/4D_Thermometer_Server.4dm b/Project/Sources/Methods/4D_Thermometer_Server.4dm
index 1f196ce..e0d554a 100644
--- a/Project/Sources/Methods/4D_Thermometer_Server.4dm
+++ b/Project/Sources/Methods/4D_Thermometer_Server.4dm
@@ -1,41 +1,9 @@
-//%attributes = {}
-var $vStatus : Integer
-var $TCP_ID : Integer
-var $data : Blob
-var $blob : Blob
-var $temperature:=10
+//%attributes = {"invisible":true,"preemptive":"capable"}
+#DECLARE($port : Integer)
-var $activated:=False:C215
+var $server : cs:C1710.TCPConnectionOption
+$server:=cs:C1710.Thermometer_Server.new($port)
-Repeat
- $err:=TCP_Listen(""; 0; 19821; 0; $TCP_ID)
- $err:=TCP_State($TCP_ID; $vStatus)
-
- If ($vStatus=8)
- DELAY PROCESS:C323(Current process:C322(); 2)
- Repeat
- $err:=TCP_ReceiveBLOB($TCP_ID; $data)
- $err:=TCP_State($TCP_ID; $vStatus)
-
- If (BLOB size:C605($data)#0)
- $text:=BLOB to text:C555($data; 0)
- If ($text="Information")
- If ($activated)
- $temperature+=1
- Else
- $temperature-=1
- End if
- $text:="Temperature is "+String:C10($temperature)+" degree Celsius"
- TEXT TO BLOB:C554($text; $blob; UTF8 C string:K22:15)
- TCP_SendBLOB($TCP_ID; $blob)
- Else
- If ($text="Activate")
- $activated:=Not:C34($activated)
- End if
- End if
- End if
-
- Until (($vStatus=0) | ($err#0))
- End if
- TCP_Close($TCP_ID)
-Until (False:C215)
\ No newline at end of file
+Use (Storage:C1525)
+ Storage:C1525[Current method name:C684]:=$server.listener
+End use
\ No newline at end of file
diff --git a/Project/Sources/Methods/m_Quit.4dm b/Project/Sources/Methods/m_Quit.4dm
index 73271b7..8466455 100644
--- a/Project/Sources/Methods/m_Quit.4dm
+++ b/Project/Sources/Methods/m_Quit.4dm
@@ -1,2 +1,2 @@
-//%attributes = {}
-QUIT 4D:C291
+//%attributes = {"invisible":true,"preemptive":"incapable"}
+QUIT 4D:C291
\ No newline at end of file
diff --git a/Project/Sources/Methods/terminateServer.4dm b/Project/Sources/Methods/terminateServer.4dm
new file mode 100644
index 0000000..32b5481
--- /dev/null
+++ b/Project/Sources/Methods/terminateServer.4dm
@@ -0,0 +1,14 @@
+//%attributes = {"invisible":true,"preemptive":"capable"}
+var $name : Text
+$name:=Current process name:C1392
+
+If (Storage:C1525[$name]#Null:C1517)
+ Storage:C1525[$name].terminate()
+ //you must terminate the listener from the process that created it
+ //attention
+ //if you kill the TCPListener without terminating it
+ //you will no longer be able to create a new listener for the same port
+ Use (Storage:C1525)
+ OB REMOVE:C1226(Storage:C1525; $name)
+ End use
+End if
\ No newline at end of file
diff --git a/Project/Sources/folders.json b/Project/Sources/folders.json
index 951beee..1135dd1 100644
--- a/Project/Sources/folders.json
+++ b/Project/Sources/folders.json
@@ -1,13 +1,28 @@
{
- "Default Folder": {
- "groups": [
- "Default Forms",
- "Default Project Methods",
- "Default Tables"
+ "HDI": {
+ "tables": [
+ "INFO"
+ ],
+ "methods": [
+ "00_Start",
+ "InitInfo",
+ "m_Quit"
+ ],
+ "forms": [
+ "[INFO]Input",
+ "[INFO]Output",
+ "HDI",
+ "HDI2"
+ ]
+ },
+ "Servers": {
+ "methods": [
+ "4D_Alarm_Server",
+ "4D_Lightbulb_Server",
+ "4D_Music_Server",
+ "4D_Plant_Server",
+ "4D_Thermometer_Server"
]
},
- "Default Forms": {},
- "Default Project Methods": {},
- "Default Tables": {},
"trash": {}
}
\ No newline at end of file
diff --git a/Project/Sources/settings.4DSettings b/Project/Sources/settings.4DSettings
index 858d664..35770d6 100644
--- a/Project/Sources/settings.4DSettings
+++ b/Project/Sources/settings.4DSettings
@@ -1,4 +1,4 @@
-
+
@@ -8,7 +8,7 @@
-
+
diff --git a/readme.md b/readme.md
index a1f56e1..bc2ac53 100644
--- a/readme.md
+++ b/readme.md
@@ -1,6 +1,10 @@
+
+
# HDI_TCPConnection
-Description (4D 20 R8)
+Description (4D 20 R9)
+
+goto [R8 branch](https://github.com/miyako/HDI_TCPConnection/blob/r8/readme.md) for the version that does not use `TCPListener`
Find more information on the [blog post](https://blog.4d.com/new-class-to-perform-tcp-connections).