├── .gitignore ├── Database ├── connection_string.txt ├── database_summary.txt └── install_db_sqlserver.md ├── LICENSE ├── MediaFiles └── audio │ ├── a.wav │ ├── antrian.wav │ ├── b.wav │ ├── c.wav │ ├── counter.wav │ ├── d.wav │ ├── delapan.wav │ ├── delapanbelas.wav │ ├── delapanpuluh.wav │ ├── delapanratus.wav │ ├── dua.wav │ ├── duabelas.wav │ ├── duapuluh.wav │ ├── duaratus.wav │ ├── e.wav │ ├── empat.wav │ ├── empatbelas.wav │ ├── empatpuluh.wav │ ├── empatratus.wav │ ├── enam.wav │ ├── enambelas.wav │ ├── enampuluh.wav │ ├── enamratus.wav │ ├── f.wav │ ├── g.wav │ ├── h.wav │ ├── i.wav │ ├── j.wav │ ├── k.wav │ ├── l.wav │ ├── lima.wav │ ├── limabelas.wav │ ├── limapuluh.wav │ ├── limaratus.wav │ ├── loket.wav │ ├── m.wav │ ├── n.wav │ ├── nol.wav │ ├── o.wav │ ├── p.wav │ ├── q.wav │ ├── r.wav │ ├── ratus.wav │ ├── s.wav │ ├── satu.wav │ ├── sebelas.wav │ ├── sembilan.wav │ ├── sembilanbelas.wav │ ├── sembilanpuluh.wav │ ├── sembilanratus.wav │ ├── sepuluh.wav │ ├── seratus.wav │ ├── simple_notification.wav │ ├── t.wav │ ├── tiga.wav │ ├── tigabelas.wav │ ├── tigapuluh.wav │ ├── tigaratus.wav │ ├── tujuh.wav │ ├── tujuhbelas.wav │ ├── tujuhpuluh.wav │ ├── tujuhratus.wav │ ├── u.wav │ ├── v.wav │ ├── w.wav │ ├── x.wav │ ├── y.wav │ └── z.wav ├── QueueAdmin ├── AboutBox.Designer.cs ├── AboutBox.cs ├── AboutBox.resx ├── App.config ├── AppMain.cs ├── Common.cs ├── Dto │ ├── IpAccessList.cs │ ├── Login.cs │ ├── Post.cs │ ├── RunningText.cs │ └── Station.cs ├── FormIPAccess.Designer.cs ├── FormIPAccess.cs ├── FormIPAccess.resx ├── FormLogin.Designer.cs ├── FormLogin.cs ├── FormLogin.resx ├── FormPost.Designer.cs ├── FormPost.cs ├── FormPost.resx ├── FormRunText.Designer.cs ├── FormRunText.cs ├── FormRunText.resx ├── FormStation.Designer.cs ├── FormStation.cs ├── FormStation.resx ├── MainForm.Designer.cs ├── MainForm.cs ├── MainForm.resx ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── QueueAdmin.csproj ├── QueueAdmin.csproj.user ├── Resources │ ├── DisplayLogoImg.png │ └── queue.png ├── packages.config └── queue.ico ├── QueueCaller ├── App.config ├── AppMain.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── QueueCaller.csproj ├── QueueCaller.csproj.user ├── Resources │ ├── DisplayLogoImg.png │ ├── lblgreen.png │ ├── lblgreenbig.png │ ├── lblnumber.png │ ├── lblorange.png │ ├── lblpurple.png │ └── queue.png ├── Settings.cs ├── Work │ ├── AboutBox.Designer.cs │ ├── AboutBox.cs │ ├── AboutBox.resx │ ├── MainForm.Designer.cs │ ├── MainForm.cs │ └── MainForm.resx ├── packages.config └── queue.ico ├── QueueConfig ├── App.config ├── AppMain.cs ├── Blowfish.cs ├── FileConfigData.cs ├── FormConfig.Designer.cs ├── FormConfig.cs ├── FormConfig.resx ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── QueueConfig.csproj ├── QueueConfig.csproj.user ├── ToolUsageInfo.cs ├── Util.cs └── queue.ico ├── QueueDisplay ├── AppMain.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── QueueDisplay.csproj ├── QueueDisplay.csproj.user ├── Resources │ ├── QueueLogo150.png │ ├── bgblue2.png │ ├── bgblue3.png │ ├── bgblue330x140.png │ ├── bgblue330x40.png │ ├── bgblue4.png │ ├── bgblue_rounded133_1x40.png │ ├── bgblue_rounded133_1x401.png │ ├── bgblue_rounded133_1x40a.png │ ├── bgblue_rounded133_1x40b.png │ ├── bgblue_rounded330x40.png │ └── btn326x35.png ├── Work │ ├── AboutBox.Designer.cs │ ├── AboutBox.cs │ ├── AboutBox.resx │ ├── AudioPlayer.cs │ ├── ColorProfile.cs │ ├── Display.Designer.cs │ ├── Display.cs │ ├── Display.resx │ ├── MainForm.Designer.cs │ ├── MainForm.cs │ ├── MainForm.resx │ ├── PostProperty.cs │ ├── RuntextLabel.cs │ ├── Settings.cs │ └── ToolUsageInfo.cs ├── app.config ├── img │ ├── DisplayLogoImg.png │ └── DisplayMainBrandingImage.png └── queue.ico ├── QueueService ├── App.config ├── CallerHandler.cs ├── Client.cs ├── DBMigration.cs ├── DBMigration_MSSQL.cs ├── DBMigration_MySQL.cs ├── DBMigration_PostgreSQL.cs ├── DBMigration_SQLite.cs ├── DisplayHandler.cs ├── Dto │ ├── IpAccessList.cs │ ├── Login.cs │ ├── Post.cs │ ├── RunningText.cs │ └── Station.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Settings.Designer.cs │ └── Settings.settings ├── QueueInstaller.cs ├── QueueInstaller.resx ├── QueueRepository.cs ├── QueueServer.cs ├── QueueService.cs ├── QueueService.csproj ├── QueueService.csproj.user ├── QueueService.resx ├── Settings.cs ├── SysHandler.cs ├── TicketHandler.cs ├── packages.config └── queue.ico ├── QueueTicket ├── App.config ├── AppMain.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── QueueTicket.csproj ├── QueueTicket.csproj.user ├── Resources │ ├── ButtonBlueOff.png │ ├── ButtonBlueOn.png │ ├── ButtonGreenOff.png │ ├── ButtonGreenOn.png │ ├── ButtonOrangeOff.png │ ├── ButtonOrangeOn.png │ ├── ButtonRedOff.png │ ├── ButtonRedOn.png │ ├── ButtonYellowOff.png │ ├── ButtonYellowOn.png │ ├── DisplayHeaderImg.png │ ├── MainBrandingImage.png │ ├── MainLogo.png │ └── MenuLabelBg.png ├── Settings.cs ├── Work │ ├── AboutBox.Designer.cs │ ├── AboutBox.cs │ ├── AboutBox.resx │ ├── ColorProfile.cs │ ├── MainForm.Designer.cs │ ├── MainForm.cs │ ├── MainForm.resx │ ├── OptionForm.Designer.cs │ ├── OptionForm.cs │ ├── OptionForm.resx │ ├── PostProperty.cs │ ├── RuntextLabel.cs │ └── ToolUsageInfo.cs └── queue.ico ├── README.md ├── TobasaLib ├── DirectShowLib │ ├── AXExtend.cs │ ├── AxCore.cs │ ├── BDAIface.cs │ ├── BDATypes.cs │ ├── Bdatif.cs │ ├── Control.cs │ ├── DES.cs │ ├── DMODShow.cs │ ├── DVDIf.cs │ ├── DevEnum.cs │ ├── DsUtils.cs │ ├── DynGraph.cs │ ├── EvCode.cs │ ├── IL21Dec.cs │ ├── MediaObj.cs │ ├── MediaParam.cs │ ├── Misc.cs │ ├── Mixerocx.cs │ ├── Mpeg2Data.cs │ ├── Mpeg2Structs.cs │ ├── PlayList.cs │ ├── QEdit.cs │ ├── RegBag.cs │ ├── Sbe.cs │ ├── Tuner.cs │ ├── TvRatings.cs │ ├── Uuids.cs │ ├── VidPort.cs │ ├── Vidcap.cs │ ├── VmRender.cs │ ├── Vmr9.cs │ ├── WhatsNew.txt │ ├── amstream.cs │ ├── amvideo.cs │ ├── atscpsipparser.cs │ ├── austream.cs │ ├── dsattrib.cs │ ├── dvbsiparser.cs │ ├── encdec.cs │ ├── license.txt │ ├── mmstream.cs │ ├── mpconfig.cs │ ├── mpeg2psiparser.cs │ ├── other.cs │ ├── qnetwork.cs │ └── readme.txt ├── LICENSE ├── LibTobasa.csproj ├── LibTobasa.csproj.user ├── Properties │ └── AssemblyInfo.cs ├── README.md ├── Work │ ├── AppException.cs │ ├── DSEngine.cs │ ├── Database.cs │ ├── Logger.cs │ ├── Message.cs │ ├── MessageHandler.cs │ ├── MessageType.cs │ ├── NetSession.cs │ ├── Notifier.cs │ ├── TCPClient.cs │ ├── TCPServer.cs │ ├── Util.cs │ └── blowfish.cs ├── app.config └── packages.config ├── TobasaQueue.sln ├── docs ├── features.txt ├── index.md └── todo.txt └── startall_output.cmd /.gitignore: -------------------------------------------------------------------------------- 1 | *.o 2 | *.obj 3 | *.res 4 | *.a 5 | *.exe 6 | *.lib 7 | *.log 8 | *.map 9 | *.ncb 10 | *.suo 11 | *.idb 12 | *.pdb 13 | *.exp 14 | *.mk 15 | #*# 16 | *.backup 17 | .vs 18 | *.mp4 19 | *.wmv 20 | _OUTPUT* 21 | _RELEASE* 22 | QueueAdmin/bin 23 | QueueAdmin/obj 24 | QueueCaller/bin 25 | QueueCaller/obj 26 | QueueDisplay/bin 27 | QueueDisplay/obj 28 | QueueService/bin 29 | QueueService/obj 30 | QueueTicket/bin 31 | QueueTicket/obj 32 | QueueConfig/bin 33 | QueueConfig/obj 34 | TobasaLib/bin 35 | TobasaLib/obj 36 | _res 37 | _notes 38 | _Private 39 | packages 40 | Database/antri.db3 -------------------------------------------------------------------------------- /Database/connection_string.txt: -------------------------------------------------------------------------------- 1 | Untuk MS SQL Server 2 | ----------------------------------------------------------------- 3 | Provider: SqlClient 4 | Connection String : "Server=127.0.0.1,1433;Database=antri;User ID=antrian;Trusted_Connection=False;" 5 | ConnectionStringPassword : ad7415644add93d6e719d2b593da6e6e 6 | 7 | 8 | Untuk SQLite 9 | ----------------------------------------------------------------- 10 | Provider: SQLITE 11 | Connection String : "Data Source=.\Database\antri.db3;Version=3;" 12 | ConnectionStringPassword : 13 | 14 | 15 | Untuk MySQL Server 16 | ----------------------------------------------------------------- 17 | Provider: MYSQL 18 | Connection String : "Data Source=127.0.0.1,1433;User ID=antrian;Initial Catalog=antri;" 19 | ConnectionStringPassword : ad7415644add93d6e719d2b593da6e6e 20 | 21 | 22 | Untuk PostgreSQL Server 23 | ----------------------------------------------------------------- 24 | Provider: Npgsql 25 | Connection String : "Data Source=127.0.0.1,1433;User ID=antrian;Initial Catalog=antri;" 26 | ConnectionStringPassword : ad7415644add93d6e719d2b593da6e6e -------------------------------------------------------------------------------- /Database/database_summary.txt: -------------------------------------------------------------------------------- 1 | SQLITE 2 | -------------------------------------------------------------- 3 | SELECT 4 | ( SELECT count(name) FROM sqlite_master WHERE type='table' AND name LIKE 'queue_%' ) AS total_table 5 | , ( SELECT COUNT(name) FROM sqlite_master WHERE type='view' AND name LIKE 'v_queue_%' ) AS total_view 6 | , ( SELECT COUNT(name) FROM sqlite_master WHERE type = 'trigger' AND tbl_name = 'queue_sequences' AND name = 'tr_queue_update_jobs' ) AS total_trigger 7 | 8 | 9 | MYSQL 10 | -------------------------------------------------------------- 11 | SELECT 12 | ( SELECT COUNT(table_name) FROM information_schema.tables WHERE TABLE_TYPE = 'BASE TABLE' AND table_schema = 'antri' AND table_name LIKE 'queue_%') AS total_table 13 | , ( SELECT COUNT(table_name) FROM information_schema.tables WHERE TABLE_TYPE = 'VIEW' AND table_schema = 'antri' AND table_name LIKE 'v_queue_%') AS total_view 14 | , ( SELECT COUNT(TRIGGER_NAME) FROM information_schema.TRIGGERS WHERE EVENT_OBJECT_TABLE = 'queue_sequences' AND TRIGGER_SCHEMA = 'antri' AND TRIGGER_NAME = 'tr_queue_update_jobs' ) AS total_trigger 15 | 16 | 17 | SQLSERVER 18 | -------------------------------------------------------------- 19 | SELECT 20 | ( SELECT COUNT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND table_catalog = 'antri' AND TABLE_NAME LIKE 'queue_%' ) AS total_table 21 | , ( SELECT COUNT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'VIEW' AND table_catalog = 'antri' AND TABLE_NAME LIKE 'v_queue_%' ) AS total_view 22 | , ( SELECT COUNT(name) FROM sys.triggers WHERE parent_id = OBJECT_ID('queue_sequences') AND name = 'tr_queue_update_jobs' ) AS total_trigger -------------------------------------------------------------------------------- /Database/install_db_sqlserver.md: -------------------------------------------------------------------------------- 1 | # Instalasi database di MS SQL Server 2 | 3 | 1. Install Microsoft SQL Server 2008 R2 Express Edition 4 | Pastikan SQL Server bisa diakses lewat network(TCP/IP) di port 1433 5 | 6 | 2. Buat user login di SQL Server 7 | (SQL Server authentication) 8 | login name : antrian 9 | password : TOBASA 10 | 11 | 3. Buat database 12 | nama database : antri 13 | owner database : antrian 14 | recovery model : Full 15 | 16 | # Pengaturan File Konfigurasi 17 | 18 | Gunakan tool QueueConfig.exe untuk mengatur konfigurasi pada semua file konfigurasi. 19 | 20 | # Links: 21 | http://www.mangapul.net/2016/12/konfigurasi-aplikasi-antrian-tobasa.html 22 | http://www.mangapul.net/2018/06/instalasi-sql-server-2008-r2-express.html 23 | http://www.mangapul.net/2018/06/sql-server-2008-tcpip-network.html 24 | http://www.mangapul.net/2018/06/setting-windows-firewall-untuk-sql.html 25 | http://www.mangapul.net/2018/06/membuat-dan-restore-database-sql-server.html -------------------------------------------------------------------------------- /MediaFiles/audio/a.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/a.wav -------------------------------------------------------------------------------- /MediaFiles/audio/antrian.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/antrian.wav -------------------------------------------------------------------------------- /MediaFiles/audio/b.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/b.wav -------------------------------------------------------------------------------- /MediaFiles/audio/c.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/c.wav -------------------------------------------------------------------------------- /MediaFiles/audio/counter.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/counter.wav -------------------------------------------------------------------------------- /MediaFiles/audio/d.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/d.wav -------------------------------------------------------------------------------- /MediaFiles/audio/delapan.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/delapan.wav -------------------------------------------------------------------------------- /MediaFiles/audio/delapanbelas.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/delapanbelas.wav -------------------------------------------------------------------------------- /MediaFiles/audio/delapanpuluh.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/delapanpuluh.wav -------------------------------------------------------------------------------- /MediaFiles/audio/delapanratus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/delapanratus.wav -------------------------------------------------------------------------------- /MediaFiles/audio/dua.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/dua.wav -------------------------------------------------------------------------------- /MediaFiles/audio/duabelas.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/duabelas.wav -------------------------------------------------------------------------------- /MediaFiles/audio/duapuluh.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/duapuluh.wav -------------------------------------------------------------------------------- /MediaFiles/audio/duaratus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/duaratus.wav -------------------------------------------------------------------------------- /MediaFiles/audio/e.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/e.wav -------------------------------------------------------------------------------- /MediaFiles/audio/empat.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/empat.wav -------------------------------------------------------------------------------- /MediaFiles/audio/empatbelas.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/empatbelas.wav -------------------------------------------------------------------------------- /MediaFiles/audio/empatpuluh.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/empatpuluh.wav -------------------------------------------------------------------------------- /MediaFiles/audio/empatratus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/empatratus.wav -------------------------------------------------------------------------------- /MediaFiles/audio/enam.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/enam.wav -------------------------------------------------------------------------------- /MediaFiles/audio/enambelas.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/enambelas.wav -------------------------------------------------------------------------------- /MediaFiles/audio/enampuluh.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/enampuluh.wav -------------------------------------------------------------------------------- /MediaFiles/audio/enamratus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/enamratus.wav -------------------------------------------------------------------------------- /MediaFiles/audio/f.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/f.wav -------------------------------------------------------------------------------- /MediaFiles/audio/g.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/g.wav -------------------------------------------------------------------------------- /MediaFiles/audio/h.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/h.wav -------------------------------------------------------------------------------- /MediaFiles/audio/i.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/i.wav -------------------------------------------------------------------------------- /MediaFiles/audio/j.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/j.wav -------------------------------------------------------------------------------- /MediaFiles/audio/k.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/k.wav -------------------------------------------------------------------------------- /MediaFiles/audio/l.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/l.wav -------------------------------------------------------------------------------- /MediaFiles/audio/lima.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/lima.wav -------------------------------------------------------------------------------- /MediaFiles/audio/limabelas.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/limabelas.wav -------------------------------------------------------------------------------- /MediaFiles/audio/limapuluh.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/limapuluh.wav -------------------------------------------------------------------------------- /MediaFiles/audio/limaratus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/limaratus.wav -------------------------------------------------------------------------------- /MediaFiles/audio/loket.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/loket.wav -------------------------------------------------------------------------------- /MediaFiles/audio/m.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/m.wav -------------------------------------------------------------------------------- /MediaFiles/audio/n.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/n.wav -------------------------------------------------------------------------------- /MediaFiles/audio/nol.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/nol.wav -------------------------------------------------------------------------------- /MediaFiles/audio/o.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/o.wav -------------------------------------------------------------------------------- /MediaFiles/audio/p.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/p.wav -------------------------------------------------------------------------------- /MediaFiles/audio/q.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/q.wav -------------------------------------------------------------------------------- /MediaFiles/audio/r.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/r.wav -------------------------------------------------------------------------------- /MediaFiles/audio/ratus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/ratus.wav -------------------------------------------------------------------------------- /MediaFiles/audio/s.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/s.wav -------------------------------------------------------------------------------- /MediaFiles/audio/satu.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/satu.wav -------------------------------------------------------------------------------- /MediaFiles/audio/sebelas.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/sebelas.wav -------------------------------------------------------------------------------- /MediaFiles/audio/sembilan.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/sembilan.wav -------------------------------------------------------------------------------- /MediaFiles/audio/sembilanbelas.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/sembilanbelas.wav -------------------------------------------------------------------------------- /MediaFiles/audio/sembilanpuluh.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/sembilanpuluh.wav -------------------------------------------------------------------------------- /MediaFiles/audio/sembilanratus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/sembilanratus.wav -------------------------------------------------------------------------------- /MediaFiles/audio/sepuluh.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/sepuluh.wav -------------------------------------------------------------------------------- /MediaFiles/audio/seratus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/seratus.wav -------------------------------------------------------------------------------- /MediaFiles/audio/simple_notification.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/simple_notification.wav -------------------------------------------------------------------------------- /MediaFiles/audio/t.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/t.wav -------------------------------------------------------------------------------- /MediaFiles/audio/tiga.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/tiga.wav -------------------------------------------------------------------------------- /MediaFiles/audio/tigabelas.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/tigabelas.wav -------------------------------------------------------------------------------- /MediaFiles/audio/tigapuluh.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/tigapuluh.wav -------------------------------------------------------------------------------- /MediaFiles/audio/tigaratus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/tigaratus.wav -------------------------------------------------------------------------------- /MediaFiles/audio/tujuh.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/tujuh.wav -------------------------------------------------------------------------------- /MediaFiles/audio/tujuhbelas.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/tujuhbelas.wav -------------------------------------------------------------------------------- /MediaFiles/audio/tujuhpuluh.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/tujuhpuluh.wav -------------------------------------------------------------------------------- /MediaFiles/audio/tujuhratus.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/tujuhratus.wav -------------------------------------------------------------------------------- /MediaFiles/audio/u.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/u.wav -------------------------------------------------------------------------------- /MediaFiles/audio/v.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/v.wav -------------------------------------------------------------------------------- /MediaFiles/audio/w.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/w.wav -------------------------------------------------------------------------------- /MediaFiles/audio/x.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/x.wav -------------------------------------------------------------------------------- /MediaFiles/audio/y.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/y.wav -------------------------------------------------------------------------------- /MediaFiles/audio/z.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/MediaFiles/audio/z.wav -------------------------------------------------------------------------------- /QueueAdmin/AboutBox.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | using System; 22 | using System.Reflection; 23 | using System.Windows.Forms; 24 | 25 | namespace Tobasa 26 | { 27 | partial class AboutBox : Form 28 | { 29 | public AboutBox() 30 | { 31 | InitializeComponent(); 32 | this.Text = String.Format("About {0}", AssemblyTitle); 33 | this.labelProductName.Text = AssemblyProduct; 34 | this.labelVersion.Text = String.Format("Version {0}", AssemblyVersion); 35 | this.labelCopyright.Text = AssemblyCopyright; 36 | this.labelCompanyName.Text = AssemblyCompany; 37 | this.textBoxDescription.Text = AssemblyDescription; 38 | } 39 | 40 | #region Assembly Attribute Accessors 41 | 42 | public string AssemblyTitle 43 | { 44 | get 45 | { 46 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); 47 | if (attributes.Length > 0) 48 | { 49 | AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; 50 | if (titleAttribute.Title != "") 51 | { 52 | return titleAttribute.Title; 53 | } 54 | } 55 | return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase); 56 | } 57 | } 58 | 59 | public string AssemblyVersion 60 | { 61 | get 62 | { 63 | return Assembly.GetExecutingAssembly().GetName().Version.ToString(); 64 | } 65 | } 66 | 67 | public string AssemblyDescription 68 | { 69 | get 70 | { 71 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); 72 | if (attributes.Length == 0) 73 | { 74 | return ""; 75 | } 76 | return ((AssemblyDescriptionAttribute)attributes[0]).Description; 77 | } 78 | } 79 | 80 | public string AssemblyProduct 81 | { 82 | get 83 | { 84 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); 85 | if (attributes.Length == 0) 86 | { 87 | return ""; 88 | } 89 | return ((AssemblyProductAttribute)attributes[0]).Product; 90 | } 91 | } 92 | 93 | public string AssemblyCopyright 94 | { 95 | get 96 | { 97 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); 98 | if (attributes.Length == 0) 99 | { 100 | return ""; 101 | } 102 | return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; 103 | } 104 | } 105 | 106 | public string AssemblyCompany 107 | { 108 | get 109 | { 110 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); 111 | if (attributes.Length == 0) 112 | { 113 | return ""; 114 | } 115 | return ((AssemblyCompanyAttribute)attributes[0]).Company; 116 | } 117 | } 118 | #endregion 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /QueueAdmin/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 |
6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 127.0.0.1 19 | 20 | 21 | 2345 22 | 23 | 24 | ADMIN#1 25 | 26 | 27 | POST0 28 | 29 | 30 | tobasaqueue 31 | 32 | 33 | e4ee0e54215f5e3dd7683923abe1dac8 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 | C4BC3A3AC2D6D367A74580388B20BC069C96B048DFEAF5CCDC0CE1E25BF23F39 61 | 62 | 63 | 64 | 65 | POST0 66 | POST1 67 | POST2 68 | POST3 69 | POST4 70 | POST5 71 | POST6 72 | POST7 73 | POST8 74 | POST9 75 | 76 | 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /QueueAdmin/AppMain.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | using System; 22 | using System.Windows.Forms; 23 | 24 | namespace Tobasa 25 | { 26 | static class AppMain 27 | { 28 | [STAThread] 29 | static void Main() 30 | { 31 | Application.EnableVisualStyles(); 32 | Application.SetCompatibleTextRenderingDefault(false); 33 | 34 | Util.CheckUserConfigurationFile(); 35 | 36 | Logger.Log("-------------------------------------------------------------------------------"); 37 | Logger.Log("Starting " + Application.ProductName + " ..."); 38 | Logger.Log("From " + Util.ProcessPath); 39 | 40 | Application.Run(new MainForm()); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /QueueAdmin/Dto/IpAccessList.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | namespace Tobasa.Dto 22 | { 23 | public class IpAccessList 24 | { 25 | public string IpAddressOld { get; set; } 26 | public string IpAddress { get; set; } 27 | public bool Allowed { get; set; } 28 | public string Keterangan { get; set; } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /QueueAdmin/Dto/Login.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | using System; 22 | 23 | namespace Tobasa.Dto 24 | { 25 | public class Login 26 | { 27 | public int Id { get; set; } 28 | public string UsernameOld { get; set; } 29 | public string Username { get; set; } 30 | public string Password { get; set; } 31 | public DateTime Expired { get; set; } 32 | public bool Active { get; set; } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /QueueAdmin/Dto/Post.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | namespace Tobasa.Dto 22 | { 23 | public class Post 24 | { 25 | public string NameOld { get; set; } 26 | public string Name { get; set; } 27 | public string NumberPrefix { get; set; } 28 | public string Keterangan { get; set; } 29 | public int Quota0 { get; set; } = 1000; 30 | public int Quota1 { get; set; } = 1000; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /QueueAdmin/Dto/RunningText.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | namespace Tobasa.Dto 22 | { 23 | public class RunningText 24 | { 25 | public int Id { get; set; } 26 | public string StationName { get; set; } 27 | public bool Sticky { get; set; } 28 | public bool Active { get; set; } 29 | public string Text { get; set; } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /QueueAdmin/Dto/Station.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | namespace Tobasa.Dto 22 | { 23 | public class Station 24 | { 25 | public string NameOld { get; set; } 26 | public string PostOld { get; set; } 27 | public string Name { get; set; } 28 | public string Post { get; set; } 29 | public string Keterangan { get; set; } 30 | public bool CanLogin { get; set; } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /QueueAdmin/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | // General Information about an assembly is controlled through the following 5 | // set of attributes. Change these attribute values to modify the information 6 | // associated with an assembly. 7 | [assembly: AssemblyTitle("Tobasa Queue Admin")] 8 | [assembly: AssemblyDescription("Tobasa Queue Admin")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("Mangapul")] 11 | [assembly: AssemblyProduct("QueueAdmin")] 12 | [assembly: AssemblyCopyright("Copyright © 2015-2025 Jefri Sibarani")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | 16 | // Setting ComVisible to false makes the types in this assembly not visible 17 | // to COM components. If you need to access a type in this assembly from 18 | // COM, set the ComVisible attribute to true on that type. 19 | [assembly: ComVisible(false)] 20 | 21 | // The following GUID is for the ID of the typelib if this project is exposed to COM 22 | [assembly: Guid("4cc68685-16a1-4281-a4f4-5da18f86742a")] 23 | 24 | // Version information for an assembly consists of the following four values: 25 | // 26 | // Major Version 27 | // Minor Version 28 | // Build Number 29 | // Revision 30 | // 31 | // You can specify all the values or you can default the Build and Revision Numbers 32 | // by using the '*' as shown below: 33 | // [assembly: AssemblyVersion("1.0.*")] 34 | [assembly: AssemblyVersion("1.8.0.0")] 35 | [assembly: AssemblyFileVersion("1.8.0.0")] 36 | -------------------------------------------------------------------------------- /QueueAdmin/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Tobasa.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Tobasa.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized resource of type System.Drawing.Bitmap. 65 | /// 66 | internal static System.Drawing.Bitmap queue { 67 | get { 68 | object obj = ResourceManager.GetObject("queue", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | 73 | /// 74 | /// Looks up a localized resource of type System.Drawing.Bitmap. 75 | /// 76 | internal static System.Drawing.Bitmap QueueLogo { 77 | get { 78 | object obj = ResourceManager.GetObject("QueueLogo", resourceCulture); 79 | return ((System.Drawing.Bitmap)(obj)); 80 | } 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /QueueAdmin/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Tobasa.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | 26 | [global::System.Configuration.ApplicationScopedSettingAttribute()] 27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 28 | [global::System.Configuration.DefaultSettingValueAttribute("C4BC3A3AC2D6D367A74580388B20BC069C96B048DFEAF5CCDC0CE1E25BF23F39")] 29 | public string SecuritySalt { 30 | get { 31 | return ((string)(this["SecuritySalt"])); 32 | } 33 | } 34 | 35 | [global::System.Configuration.UserScopedSettingAttribute()] 36 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 37 | [global::System.Configuration.DefaultSettingValueAttribute("127.0.0.1")] 38 | public string QueueServerHost { 39 | get { 40 | return ((string)(this["QueueServerHost"])); 41 | } 42 | set { 43 | this["QueueServerHost"] = value; 44 | } 45 | } 46 | 47 | [global::System.Configuration.UserScopedSettingAttribute()] 48 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 49 | [global::System.Configuration.DefaultSettingValueAttribute("2345")] 50 | public int QueueServerPort { 51 | get { 52 | return ((int)(this["QueueServerPort"])); 53 | } 54 | set { 55 | this["QueueServerPort"] = value; 56 | } 57 | } 58 | 59 | [global::System.Configuration.UserScopedSettingAttribute()] 60 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 61 | [global::System.Configuration.DefaultSettingValueAttribute("ADMIN#1")] 62 | public string StationName { 63 | get { 64 | return ((string)(this["StationName"])); 65 | } 66 | set { 67 | this["StationName"] = value; 68 | } 69 | } 70 | 71 | [global::System.Configuration.UserScopedSettingAttribute()] 72 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 73 | [global::System.Configuration.DefaultSettingValueAttribute("POST0")] 74 | public string StationPost { 75 | get { 76 | return ((string)(this["StationPost"])); 77 | } 78 | set { 79 | this["StationPost"] = value; 80 | } 81 | } 82 | 83 | [global::System.Configuration.UserScopedSettingAttribute()] 84 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 85 | [global::System.Configuration.DefaultSettingValueAttribute("tobasaqueue")] 86 | public string QueueUserName { 87 | get { 88 | return ((string)(this["QueueUserName"])); 89 | } 90 | set { 91 | this["QueueUserName"] = value; 92 | } 93 | } 94 | 95 | [global::System.Configuration.UserScopedSettingAttribute()] 96 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 97 | [global::System.Configuration.DefaultSettingValueAttribute("e4ee0e54215f5e3dd7683923abe1dac8")] 98 | public string QueuePassword { 99 | get { 100 | return ((string)(this["QueuePassword"])); 101 | } 102 | set { 103 | this["QueuePassword"] = value; 104 | } 105 | } 106 | 107 | [global::System.Configuration.ApplicationScopedSettingAttribute()] 108 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 109 | [global::System.Configuration.DefaultSettingValueAttribute(@" 110 | 111 | POST0 112 | POST1 113 | POST2 114 | POST3 115 | POST4 116 | POST5 117 | POST6 118 | POST7 119 | POST8 120 | POST9 121 | ")] 122 | public global::System.Collections.Specialized.StringCollection UIPostList { 123 | get { 124 | return ((global::System.Collections.Specialized.StringCollection)(this["UIPostList"])); 125 | } 126 | } 127 | } 128 | } 129 | -------------------------------------------------------------------------------- /QueueAdmin/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | C4BC3A3AC2D6D367A74580388B20BC069C96B048DFEAF5CCDC0CE1E25BF23F39 7 | 8 | 9 | 127.0.0.1 10 | 11 | 12 | 2345 13 | 14 | 15 | ADMIN#1 16 | 17 | 18 | POST0 19 | 20 | 21 | tobasaqueue 22 | 23 | 24 | e4ee0e54215f5e3dd7683923abe1dac8 25 | 26 | 27 | <?xml version="1.0" encoding="utf-16"?> 28 | <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 29 | <string>POST0</string> 30 | <string>POST1</string> 31 | <string>POST2</string> 32 | <string>POST3</string> 33 | <string>POST4</string> 34 | <string>POST5</string> 35 | <string>POST6</string> 36 | <string>POST7</string> 37 | <string>POST8</string> 38 | <string>POST9</string> 39 | </ArrayOfString> 40 | 41 | 42 | -------------------------------------------------------------------------------- /QueueAdmin/QueueAdmin.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | publish\ 5 | 6 | 7 | 8 | 9 | 10 | en-US 11 | false 12 | 13 | 14 | D:\projects\tobasaqueue_foss\_OUTPUT\ 15 | 16 | -------------------------------------------------------------------------------- /QueueAdmin/Resources/DisplayLogoImg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueAdmin/Resources/DisplayLogoImg.png -------------------------------------------------------------------------------- /QueueAdmin/Resources/queue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueAdmin/Resources/queue.png -------------------------------------------------------------------------------- /QueueAdmin/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /QueueAdmin/queue.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueAdmin/queue.ico -------------------------------------------------------------------------------- /QueueCaller/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 |
6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 127.0.0.1 19 | 20 | 21 | 2345 22 | 23 | 24 | CALL#1 25 | 26 | 27 | POST0 28 | 29 | 30 | tobasaqueue 31 | 32 | 33 | e4ee0e54215f5e3dd7683923abe1dac8 34 | 35 | 36 | True 37 | 38 | 39 | True 40 | 41 | 42 | True 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 | C4BC3A3AC2D6D367A74580388B20BC069C96B048DFEAF5CCDC0CE1E25BF23F39 70 | 71 | 72 | 73 | 74 | POST0|Apotik 75 | POST1|Laboratorium 76 | POST2|Pendaftaran RJ 77 | POST3|BPJS Kesehatan 78 | POST4|Customer Service 79 | POST5|Poli Gigi 80 | POST6|Poli Anak 81 | POST7|Poli Mata 82 | POST8|Poli Kulit 83 | POST9|Poli THT 84 | 85 | 86 | 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /QueueCaller/AppMain.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | using System; 22 | using System.Windows.Forms; 23 | 24 | namespace Tobasa 25 | { 26 | static class AppMain 27 | { 28 | [STAThread] 29 | static void Main() 30 | { 31 | Application.EnableVisualStyles(); 32 | Application.SetCompatibleTextRenderingDefault(false); 33 | 34 | Util.CheckUserConfigurationFile(); 35 | 36 | Logger.Log("-------------------------------------------------------------------------------"); 37 | Logger.Log("Starting " + Application.ProductName + " ..."); 38 | Logger.Log("From " + Util.ProcessPath); 39 | 40 | Application.Run(new MainForm()); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /QueueCaller/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | // General Information about an assembly is controlled through the following 5 | // set of attributes. Change these attribute values to modify the information 6 | // associated with an assembly. 7 | [assembly: AssemblyTitle("Tobasa Queue Caller")] 8 | [assembly: AssemblyDescription("Tobasa Queue Caller")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("Mangapul")] 11 | [assembly: AssemblyProduct("Tobasa Queue Caller")] 12 | [assembly: AssemblyCopyright("Copyright © 2015-2025 Jefri Sibarani")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | 16 | // Setting ComVisible to false makes the types in this assembly not visible 17 | // to COM components. If you need to access a type in this assembly from 18 | // COM, set the ComVisible attribute to true on that type. 19 | [assembly: ComVisible(false)] 20 | 21 | // The following GUID is for the ID of the typelib if this project is exposed to COM 22 | [assembly: Guid("41db4ac3-870c-480b-95dd-231724ba7222")] 23 | 24 | // Version information for an assembly consists of the following four values: 25 | // 26 | // Major Version 27 | // Minor Version 28 | // Build Number 29 | // Revision 30 | // 31 | // You can specify all the values or you can default the Build and Revision Numbers 32 | // by using the '*' as shown below: 33 | // [assembly: AssemblyVersion("1.0.*")] 34 | [assembly: AssemblyVersion("1.8.0.0")] 35 | [assembly: AssemblyFileVersion("1.8.0.0")] 36 | -------------------------------------------------------------------------------- /QueueCaller/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 127.0.0.1 7 | 8 | 9 | 2345 10 | 11 | 12 | CALL#1 13 | 14 | 15 | POST0 16 | 17 | 18 | C4BC3A3AC2D6D367A74580388B20BC069C96B048DFEAF5CCDC0CE1E25BF23F39 19 | 20 | 21 | tobasaqueue 22 | 23 | 24 | e4ee0e54215f5e3dd7683923abe1dac8 25 | 26 | 27 | <?xml version="1.0" encoding="utf-16"?> 28 | <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 29 | <string>POST0|Apotik</string> 30 | <string>POST1|Laboratorium</string> 31 | <string>POST2|Pendaftaran RJ</string> 32 | <string>POST3|BPJS Kesehatan</string> 33 | <string>POST4|Customer Service</string> 34 | <string>POST5|Poli Gigi</string> 35 | <string>POST6|Poli Anak</string> 36 | <string>POST7|Poli Mata</string> 37 | <string>POST8|Poli Kulit</string> 38 | <string>POST9|Poli THT</string> 39 | </ArrayOfString> 40 | 41 | 42 | True 43 | 44 | 45 | True 46 | 47 | 48 | True 49 | 50 | 51 | -------------------------------------------------------------------------------- /QueueCaller/QueueCaller.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | publish\ 5 | 6 | 7 | 8 | 9 | 10 | en-US 11 | false 12 | ProjectFiles 13 | 14 | -------------------------------------------------------------------------------- /QueueCaller/Resources/DisplayLogoImg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueCaller/Resources/DisplayLogoImg.png -------------------------------------------------------------------------------- /QueueCaller/Resources/lblgreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueCaller/Resources/lblgreen.png -------------------------------------------------------------------------------- /QueueCaller/Resources/lblgreenbig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueCaller/Resources/lblgreenbig.png -------------------------------------------------------------------------------- /QueueCaller/Resources/lblnumber.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueCaller/Resources/lblnumber.png -------------------------------------------------------------------------------- /QueueCaller/Resources/lblorange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueCaller/Resources/lblorange.png -------------------------------------------------------------------------------- /QueueCaller/Resources/lblpurple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueCaller/Resources/lblpurple.png -------------------------------------------------------------------------------- /QueueCaller/Resources/queue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueCaller/Resources/queue.png -------------------------------------------------------------------------------- /QueueCaller/Settings.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | namespace Tobasa.Properties { 22 | 23 | 24 | // This class allows you to handle specific events on the settings class: 25 | // The SettingChanging event is raised before a setting's value is changed. 26 | // The PropertyChanged event is raised after a setting's value is changed. 27 | // The SettingsLoaded event is raised after the setting values are loaded. 28 | // The SettingsSaving event is raised before the setting values are saved. 29 | internal sealed partial class Settings { 30 | 31 | public Settings() { 32 | // // To add event handlers for saving and changing settings, uncomment the lines below: 33 | // 34 | // this.SettingChanging += this.SettingChangingEventHandler; 35 | // 36 | // this.SettingsSaving += this.SettingsSavingEventHandler; 37 | // 38 | } 39 | 40 | private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { 41 | // Add code to handle the SettingChangingEvent event here. 42 | } 43 | 44 | private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { 45 | // Add code to handle the SettingsSaving event here. 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /QueueCaller/Work/AboutBox.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | using System; 22 | using System.Reflection; 23 | using System.Windows.Forms; 24 | 25 | namespace Tobasa 26 | { 27 | partial class AboutBox : Form 28 | { 29 | public AboutBox() 30 | { 31 | InitializeComponent(); 32 | this.Text = String.Format("About {0}", AssemblyTitle); 33 | this.labelProductName.Text = AssemblyProduct; 34 | this.labelVersion.Text = String.Format("Version {0}", AssemblyVersion); 35 | this.labelCopyright.Text = AssemblyCopyright; 36 | this.labelCompanyName.Text = AssemblyCompany; 37 | this.textBoxDescription.Text = AssemblyDescription; 38 | } 39 | 40 | #region Assembly Attribute Accessors 41 | 42 | public string AssemblyTitle 43 | { 44 | get 45 | { 46 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); 47 | if (attributes.Length > 0) 48 | { 49 | AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; 50 | if (titleAttribute.Title != "") 51 | { 52 | return titleAttribute.Title; 53 | } 54 | } 55 | return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase); 56 | } 57 | } 58 | 59 | public string AssemblyVersion 60 | { 61 | get 62 | { 63 | return Assembly.GetExecutingAssembly().GetName().Version.ToString(); 64 | } 65 | } 66 | 67 | public string AssemblyDescription 68 | { 69 | get 70 | { 71 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); 72 | if (attributes.Length == 0) 73 | { 74 | return ""; 75 | } 76 | return ((AssemblyDescriptionAttribute)attributes[0]).Description; 77 | } 78 | } 79 | 80 | public string AssemblyProduct 81 | { 82 | get 83 | { 84 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); 85 | if (attributes.Length == 0) 86 | { 87 | return ""; 88 | } 89 | return ((AssemblyProductAttribute)attributes[0]).Product; 90 | } 91 | } 92 | 93 | public string AssemblyCopyright 94 | { 95 | get 96 | { 97 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); 98 | if (attributes.Length == 0) 99 | { 100 | return ""; 101 | } 102 | return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; 103 | } 104 | } 105 | 106 | public string AssemblyCompany 107 | { 108 | get 109 | { 110 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); 111 | if (attributes.Length == 0) 112 | { 113 | return ""; 114 | } 115 | return ((AssemblyCompanyAttribute)attributes[0]).Company; 116 | } 117 | } 118 | #endregion 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /QueueCaller/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /QueueCaller/queue.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueCaller/queue.ico -------------------------------------------------------------------------------- /QueueConfig/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /QueueConfig/AppMain.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace Tobasa 5 | { 6 | static class AppMain 7 | { 8 | [STAThread] 9 | static void Main() 10 | { 11 | Application.EnableVisualStyles(); 12 | Application.SetCompatibleTextRenderingDefault(false); 13 | Application.Run(new FormServerConfig()); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /QueueConfig/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Tobasa Queue Config")] 9 | [assembly: AssemblyDescription("Tobasa Queue Config")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("Mangapul")] 12 | [assembly: AssemblyProduct("Tobasa Queue Config")] 13 | [assembly: AssemblyCopyright("Copyright © 2015-2025 Jefri Sibarani")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("5355058f-4fc7-444f-87ee-d57c6b6ef63d")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.8.0.0")] 36 | [assembly: AssemblyFileVersion("1.8.0.0")] 37 | -------------------------------------------------------------------------------- /QueueConfig/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Tobasa.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Tobasa.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /QueueConfig/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Tobasa.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /QueueConfig/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /QueueConfig/QueueConfig.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | publish\ 5 | 6 | 7 | 8 | 9 | 10 | en-US 11 | false 12 | 13 | -------------------------------------------------------------------------------- /QueueConfig/ToolUsageInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | 6 | namespace Tobasa 7 | { 8 | public class ToolUsageInfo 9 | { 10 | public static void ShowUsageInfo() 11 | { 12 | Form infoForm = new Form 13 | { 14 | Text = "Tool Usage Information", 15 | Width = 500, 16 | Height = 450, 17 | StartPosition = FormStartPosition.CenterScreen, 18 | FormBorderStyle = FormBorderStyle.FixedDialog, 19 | MaximizeBox = false, 20 | MinimizeBox = false 21 | }; 22 | 23 | WebBrowser webBrowser = new WebBrowser 24 | { 25 | Dock = DockStyle.Top, 26 | Height = 350, // Keep space for the button 27 | AllowNavigation = false, 28 | IsWebBrowserContextMenuEnabled = false, 29 | ScriptErrorsSuppressed = true 30 | }; 31 | 32 | 33 | string htmlContent = @" 34 | 35 | 36 | 41 | 49 | 50 | 51 |

QueueConfig.exe

52 |

Tool ini harus dijalankan dari dalam folder Aplikasi Antrian Tobasa, 53 | yang berisi semua modul aplikasi.
54 | Tool ini akan membuat file konfigurasi default untuk semua modul-modul tadi.
55 |

    56 |
  • QueueCaller.exe.config
  • 57 |
  • QueueAdmin.exe.config
  • 58 |
  • QueueDisplay.exe.config
  • 59 |
  • QueueService.exe.config
  • 60 |
  • QueueTicket.exe.config
  • 61 |
62 | Setelah menggunakan tool ini,
63 | hapus semua file/folder konfigurasi yang mungkin sudah ada yang ada di dalam folder
64 | %HOMEPATH%\AppData\Local\Mangapul,
65 | %HOMEPATH%\AppData\Roaming\Mangapul,
66 | agar aplikasi Antrian Tobasa menggunakan file-file konfigurasi yang baru. 67 |

68 |

Untuk info lebih lanjut buka www.mangapul.net

69 | 70 | "; 71 | 72 | 73 | webBrowser.DocumentText = htmlContent; 74 | 75 | // Attach event to allow JavaScript to call C# method 76 | webBrowser.ObjectForScripting = new ExplorerHelper(); 77 | 78 | Button closeButton = new Button 79 | { 80 | Text = "OK", 81 | Dock = DockStyle.Bottom, 82 | Width = 100, 83 | Height = 40 84 | }; 85 | closeButton.Click += (sender, e) => infoForm.Close(); 86 | 87 | infoForm.Controls.Add(webBrowser); 88 | infoForm.Controls.Add(closeButton); 89 | 90 | infoForm.ShowDialog(); 91 | } 92 | } 93 | 94 | // Class to handle JavaScript call 95 | [System.Runtime.InteropServices.ComVisible(true)] 96 | public class ExplorerHelper 97 | { 98 | public void OpenFolder() 99 | { 100 | // Resolve environment variable %HOMEPATH% 101 | string homePath = Environment.ExpandEnvironmentVariables("C:%HOMEPATH%\\AppData\\Local\\Mangapul"); 102 | 103 | if (Directory.Exists(homePath)) 104 | { 105 | Process.Start("explorer.exe", homePath); 106 | } 107 | else 108 | { 109 | MessageBox.Show("Folder does not exist: " + homePath, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 110 | } 111 | } 112 | 113 | public void OpenBrowser() 114 | { 115 | try 116 | { 117 | Process.Start("www.mangapul.net"); 118 | } 119 | catch (Exception ex) 120 | { 121 | MessageBox.Show("Failed to open browser: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 122 | } 123 | } 124 | } 125 | 126 | } 127 | 128 | 129 | -------------------------------------------------------------------------------- /QueueConfig/queue.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueConfig/queue.ico -------------------------------------------------------------------------------- /QueueDisplay/AppMain.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | using System; 22 | using System.Windows.Forms; 23 | 24 | namespace Tobasa 25 | { 26 | static class AppMain 27 | { 28 | [STAThread] 29 | static void Main() 30 | { 31 | Application.EnableVisualStyles(); 32 | Application.SetCompatibleTextRenderingDefault(false); 33 | 34 | Util.CheckUserConfigurationFile(); 35 | 36 | Logger.Log("-------------------------------------------------------------------------------"); 37 | Logger.Log("Starting " + Application.ProductName + " ..."); 38 | Logger.Log("From " + Util.ProcessPath); 39 | 40 | Application.Run(new MainForm()); 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /QueueDisplay/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | // General Information about an assembly is controlled through the following 5 | // set of attributes. Change these attribute values to modify the information 6 | // associated with an assembly. 7 | [assembly: AssemblyTitle("Tobasa Queue Display")] 8 | [assembly: AssemblyDescription("Tobasa Queue Display")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("Mangapul")] 11 | [assembly: AssemblyProduct("Tobasa Queue Display")] 12 | [assembly: AssemblyCopyright("Copyright © 2015-2025 Jefri Sibarani")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | 16 | // Setting ComVisible to false makes the types in this assembly not visible 17 | // to COM components. If you need to access a type in this assembly from 18 | // COM, set the ComVisible attribute to true on that type. 19 | [assembly: ComVisible(false)] 20 | 21 | // The following GUID is for the ID of the typelib if this project is exposed to COM 22 | [assembly: Guid("df6f8d80-ea1d-4671-bfe0-0f38b56ecd17")] 23 | 24 | // Version information for an assembly consists of the following four values: 25 | // 26 | // Major Version 27 | // Minor Version 28 | // Build Number 29 | // Revision 30 | // 31 | // You can specify all the values or you can default the Build and Revision Numbers 32 | // by using the '*' as shown below: 33 | // [assembly: AssemblyVersion("1.0.*")] 34 | [assembly: AssemblyVersion("1.8.0.0")] 35 | [assembly: AssemblyFileVersion("1.8.0.0")] 36 | -------------------------------------------------------------------------------- /QueueDisplay/QueueDisplay.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | publish\ 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | en-US 16 | false 17 | ShowAllFiles 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /QueueDisplay/Resources/QueueLogo150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueDisplay/Resources/QueueLogo150.png -------------------------------------------------------------------------------- /QueueDisplay/Resources/bgblue2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueDisplay/Resources/bgblue2.png -------------------------------------------------------------------------------- /QueueDisplay/Resources/bgblue3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueDisplay/Resources/bgblue3.png -------------------------------------------------------------------------------- /QueueDisplay/Resources/bgblue330x140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueDisplay/Resources/bgblue330x140.png -------------------------------------------------------------------------------- /QueueDisplay/Resources/bgblue330x40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueDisplay/Resources/bgblue330x40.png -------------------------------------------------------------------------------- /QueueDisplay/Resources/bgblue4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueDisplay/Resources/bgblue4.png -------------------------------------------------------------------------------- /QueueDisplay/Resources/bgblue_rounded133_1x40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueDisplay/Resources/bgblue_rounded133_1x40.png -------------------------------------------------------------------------------- /QueueDisplay/Resources/bgblue_rounded133_1x401.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueDisplay/Resources/bgblue_rounded133_1x401.png -------------------------------------------------------------------------------- /QueueDisplay/Resources/bgblue_rounded133_1x40a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueDisplay/Resources/bgblue_rounded133_1x40a.png -------------------------------------------------------------------------------- /QueueDisplay/Resources/bgblue_rounded133_1x40b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueDisplay/Resources/bgblue_rounded133_1x40b.png -------------------------------------------------------------------------------- /QueueDisplay/Resources/bgblue_rounded330x40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueDisplay/Resources/bgblue_rounded330x40.png -------------------------------------------------------------------------------- /QueueDisplay/Resources/btn326x35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueDisplay/Resources/btn326x35.png -------------------------------------------------------------------------------- /QueueDisplay/Work/AboutBox.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | using System; 22 | using System.Reflection; 23 | using System.Windows.Forms; 24 | 25 | namespace Tobasa 26 | { 27 | partial class AboutBox : Form 28 | { 29 | public AboutBox() 30 | { 31 | InitializeComponent(); 32 | this.KeyPreview = true; // to enable key down events 33 | this.Text = String.Format("About {0}", AssemblyTitle); 34 | this.labelProductName.Text = AssemblyProduct; 35 | this.labelVersion.Text = String.Format("Version {0}", AssemblyVersion); 36 | this.labelCopyright.Text = AssemblyCopyright; 37 | this.labelCompanyName.Text = AssemblyCompany; 38 | this.textBoxDescription.Text = AssemblyDescription; 39 | } 40 | 41 | #region Assembly Attribute Accessors 42 | 43 | public string AssemblyTitle 44 | { 45 | get 46 | { 47 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); 48 | if (attributes.Length > 0) 49 | { 50 | AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; 51 | if (titleAttribute.Title != "") 52 | { 53 | return titleAttribute.Title; 54 | } 55 | } 56 | return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase); 57 | } 58 | } 59 | 60 | public string AssemblyVersion 61 | { 62 | get 63 | { 64 | return Assembly.GetExecutingAssembly().GetName().Version.ToString(); 65 | } 66 | } 67 | 68 | public string AssemblyDescription 69 | { 70 | get 71 | { 72 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); 73 | if (attributes.Length == 0) 74 | { 75 | return ""; 76 | } 77 | return ((AssemblyDescriptionAttribute)attributes[0]).Description; 78 | } 79 | } 80 | 81 | public string AssemblyProduct 82 | { 83 | get 84 | { 85 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); 86 | if (attributes.Length == 0) 87 | { 88 | return ""; 89 | } 90 | return ((AssemblyProductAttribute)attributes[0]).Product; 91 | } 92 | } 93 | 94 | public string AssemblyCopyright 95 | { 96 | get 97 | { 98 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); 99 | if (attributes.Length == 0) 100 | { 101 | return ""; 102 | } 103 | return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; 104 | } 105 | } 106 | 107 | public string AssemblyCompany 108 | { 109 | get 110 | { 111 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); 112 | if (attributes.Length == 0) 113 | { 114 | return ""; 115 | } 116 | return ((AssemblyCompanyAttribute)attributes[0]).Company; 117 | } 118 | } 119 | #endregion 120 | 121 | private void okButton_Click(object sender, EventArgs e) 122 | { 123 | this.Close(); 124 | } 125 | 126 | private void AboutBox_KeyDown(object sender, KeyEventArgs e) 127 | { 128 | if (e.KeyCode == Keys.Escape) 129 | { 130 | this.Close(); 131 | } 132 | } 133 | } 134 | } 135 | -------------------------------------------------------------------------------- /QueueDisplay/Work/RuntextLabel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | using System.Drawing; 4 | 5 | namespace Tobasa 6 | { 7 | class RuntextLabel : Label 8 | { 9 | private int CurrentPosition { get; set; } 10 | private Timer Timer { get; set; } 11 | SizeF stringSize = new SizeF(); 12 | float initialWidth = 0; 13 | float leftLimit = 0; 14 | public Timer timer = null; 15 | 16 | public RuntextLabel() 17 | { 18 | UseCompatibleTextRendering = true; 19 | CurrentPosition = 0; 20 | 21 | timer = new Timer(); 22 | timer.Interval = 25; 23 | timer.Tick += new EventHandler(Timer_Tick); 24 | timer.Start(); 25 | } 26 | 27 | void Timer_Tick(object sender, EventArgs e) 28 | { 29 | if (CurrentPosition <= (int)leftLimit) 30 | { 31 | CurrentPosition = Parent.Width; 32 | } 33 | else 34 | { 35 | CurrentPosition -= 1; 36 | } 37 | 38 | Invalidate(); 39 | } 40 | 41 | protected override void OnPaint(PaintEventArgs e) 42 | { 43 | if (initialWidth == 0) 44 | { 45 | // stringSize = e.Graphics.MeasureString(this.Text, this.Font); 46 | stringSize = TextRenderer.MeasureText(Text, Font); 47 | initialWidth = stringSize.Width; 48 | leftLimit = -initialWidth; 49 | } 50 | 51 | e.Graphics.TranslateTransform(CurrentPosition, 0); 52 | base.OnPaint(e); 53 | } 54 | 55 | protected override void Dispose(bool disposing) 56 | { 57 | if (disposing) 58 | { 59 | if (Timer != null) 60 | Timer.Dispose(); 61 | } 62 | Timer = null; 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /QueueDisplay/Work/Settings.cs: -------------------------------------------------------------------------------- 1 | namespace Tobasa.Properties { 2 | 3 | 4 | // This class allows you to handle specific events on the settings class: 5 | // The SettingChanging event is raised before a setting's value is changed. 6 | // The PropertyChanged event is raised after a setting's value is changed. 7 | // The SettingsLoaded event is raised after the setting values are loaded. 8 | // The SettingsSaving event is raised before the setting values are saved. 9 | internal sealed partial class Settings { 10 | 11 | public Settings() { 12 | // // To add event handlers for saving and changing settings, uncomment the lines below: 13 | // 14 | // this.SettingChanging += this.SettingChangingEventHandler; 15 | // 16 | // this.SettingsSaving += this.SettingsSavingEventHandler; 17 | // 18 | } 19 | 20 | private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { 21 | // Add code to handle the SettingChangingEvent event here. 22 | } 23 | 24 | private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { 25 | // Add code to handle the SettingsSaving event here. 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /QueueDisplay/Work/ToolUsageInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | 6 | namespace Tobasa 7 | { 8 | public class ToolUsageInfo 9 | { 10 | public static void ShowUsageInfo() 11 | { 12 | Form infoForm = new Form 13 | { 14 | Text = "Information", 15 | Width = 500, 16 | Height = 450, 17 | StartPosition = FormStartPosition.CenterScreen, 18 | FormBorderStyle = FormBorderStyle.FixedDialog, 19 | MaximizeBox = false, 20 | MinimizeBox = false 21 | }; 22 | 23 | WebBrowser webBrowser = new WebBrowser 24 | { 25 | Dock = DockStyle.Top, 26 | Height = 350, // Keep space for the button 27 | AllowNavigation = false, 28 | IsWebBrowserContextMenuEnabled = false, 29 | ScriptErrorsSuppressed = true 30 | }; 31 | 32 | 33 | string htmlContent = @" 34 | 35 | 36 | 41 | 49 | 50 | 51 |

QueueDisplay

52 |

Secara default modul ini akan running full screen.

53 | Untuk keluar dari full screen, tekan tombol keyboard F
54 | Untuk kembali full screen, tekan tombol keyboard F
55 | Untuk masuk ke bagian pengaturan, tekan tombol Ctrl dan O secara bersamaan
56 | Untuk menutup tekan tombol Alt dan F4 secara bersamaan
57 |

58 |

Untuk info lebih lanjut buka www.mangapul.net

59 | 60 | "; 61 | 62 | webBrowser.DocumentText = htmlContent; 63 | 64 | // Attach event to allow JavaScript to call C# method 65 | webBrowser.ObjectForScripting = new ExplorerHelper(); 66 | 67 | 68 | Panel bottomPanel = new Panel 69 | { 70 | Dock = DockStyle.Bottom, 71 | Height = 50, 72 | Padding = new Padding(20, 2, 20, 2) 73 | }; 74 | 75 | CheckBox showNextTimeCheckBox = new CheckBox 76 | { 77 | Text = "Show this info dialog next time", 78 | AutoSize = true, 79 | Left = 20, 80 | Top = 25, 81 | Checked = true, 82 | }; 83 | 84 | Button closeButton = new Button 85 | { 86 | Text = "Close", 87 | AutoSize = true, 88 | Top = 15, 89 | Left = bottomPanel.Width - 120, 90 | Anchor = AnchorStyles.Right | AnchorStyles.Top 91 | }; 92 | closeButton.Click += (sender, e) => 93 | { 94 | bool showNextTime = showNextTimeCheckBox.Checked; 95 | Properties.Settings.Default.ShowInfoDialog = showNextTime; 96 | Properties.Settings.Default.Save(); 97 | infoForm.Close(); 98 | }; 99 | 100 | bottomPanel.Controls.Add(showNextTimeCheckBox); 101 | bottomPanel.Controls.Add(closeButton); 102 | 103 | infoForm.Controls.Add(webBrowser); 104 | infoForm.Controls.Add(bottomPanel); 105 | 106 | 107 | // Adjust closeButton position after form loads 108 | infoForm.Load += (s, e) => 109 | { 110 | closeButton.Left = bottomPanel.Width - closeButton.Width - 20; 111 | closeButton.Focus(); 112 | }; 113 | infoForm.AcceptButton = closeButton; 114 | 115 | infoForm.ShowDialog(); 116 | } 117 | } 118 | 119 | // Class to handle JavaScript call 120 | [System.Runtime.InteropServices.ComVisible(true)] 121 | public class ExplorerHelper 122 | { 123 | public void OpenFolder() 124 | { 125 | // Resolve environment variable %HOMEPATH% 126 | string homePath = Environment.ExpandEnvironmentVariables("C:%HOMEPATH%\\AppData\\Local\\Mangapul"); 127 | 128 | if (Directory.Exists(homePath)) 129 | { 130 | Process.Start("explorer.exe", homePath); 131 | } 132 | else 133 | { 134 | MessageBox.Show("Folder does not exist: " + homePath, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 135 | } 136 | } 137 | 138 | public void OpenBrowser() 139 | { 140 | try 141 | { 142 | Process.Start("www.mangapul.net"); 143 | } 144 | catch (Exception ex) 145 | { 146 | MessageBox.Show("Failed to open browser: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 147 | } 148 | } 149 | } 150 | 151 | } 152 | 153 | 154 | -------------------------------------------------------------------------------- /QueueDisplay/img/DisplayLogoImg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueDisplay/img/DisplayLogoImg.png -------------------------------------------------------------------------------- /QueueDisplay/img/DisplayMainBrandingImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueDisplay/img/DisplayMainBrandingImage.png -------------------------------------------------------------------------------- /QueueDisplay/queue.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueDisplay/queue.ico -------------------------------------------------------------------------------- /QueueService/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 11 | 13 | 15 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 2345 25 | 26 | 27 | C4BC3A3AC2D6D367A74580388B20BC069C96B048DFEAF5CCDC0CE1E25BF23F39 28 | 29 | 30 | 1000 31 | 32 | 33 | False 34 | 35 | 36 | ad7415644add93d6e719d2b593da6e6e 37 | 38 | 39 | SQLITE 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 | -------------------------------------------------------------------------------- /QueueService/Client.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | using System; 22 | 23 | namespace Tobasa 24 | { 25 | public enum ClientType 26 | { 27 | QueueDisplay, 28 | QueueTicket, 29 | QueueCaller, 30 | Unknown 31 | } 32 | 33 | public class Client 34 | { 35 | public Client(NetSession ses) 36 | { 37 | Session = ses; 38 | Type = ClientType.QueueCaller; 39 | } 40 | 41 | public bool ReceiveMessageFromOtherPost { get; set; } = true; 42 | 43 | public bool LoggedIn { get; set; } = false; 44 | 45 | public int Id 46 | { 47 | get 48 | { 49 | if (Session != null) 50 | return Session.Id; 51 | else 52 | return -1; 53 | } 54 | } 55 | 56 | public ClientType Type { get; set; } 57 | 58 | public NetSession Session { get; } = null; 59 | 60 | public string Name { get; set; } = string.Empty; 61 | 62 | public string Post { get; set; } = string.Empty; 63 | 64 | public string UserName { get; set; } = string.Empty; 65 | 66 | public string Password { get; set; } = string.Empty; 67 | 68 | public static ClientType ClientTypeFromString(string val) 69 | { 70 | // possible value for val : CALLER,DISPLAY,TICKET 71 | 72 | ClientType type = ClientType.Unknown; 73 | 74 | if (val == null) 75 | return type; 76 | 77 | if (val == "CALLER") 78 | type = ClientType.QueueCaller; 79 | else if (val == "DISPLAY") 80 | type = ClientType.QueueDisplay; 81 | else if (val == "TICKET") 82 | type = ClientType.QueueTicket; 83 | else 84 | type = ClientType.Unknown; 85 | 86 | return type; 87 | } 88 | 89 | public string RemoteInfo 90 | { 91 | get { return Session.RemoteInfo; } 92 | } 93 | 94 | public void Close() 95 | { 96 | if (Session != null) 97 | Session.Close(); 98 | } 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /QueueService/DBMigration.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Data.Common; 4 | 5 | namespace Tobasa 6 | { 7 | internal class DBMigration 8 | { 9 | public static bool InitializeDatabase() 10 | { 11 | try 12 | { 13 | Database.Me.OpenConnection(); 14 | 15 | List commandList = new List(); 16 | string objectSummarySql = ""; 17 | string pupulateDataSql = ""; 18 | 19 | if (Database.Me.ProviderType == DatabaseProviderType.SQLITE) 20 | { 21 | commandList = DBMigration_SQLite.GetCommandList(); 22 | objectSummarySql = DBMigration_SQLite.GetObjectSummaryQuery(Database.Me.DatabaseName); 23 | pupulateDataSql = DBMigration_SQLite.cmd_insert_all_basic_data; 24 | } 25 | else if (Database.Me.ProviderType == DatabaseProviderType.MYSQL) 26 | { 27 | commandList = DBMigration_MySQL.GetCommandList(); 28 | objectSummarySql = DBMigration_MySQL.GetObjectSummaryQuery(Database.Me.DatabaseName); 29 | pupulateDataSql = DBMigration_MySQL.cmd_insert_all_basic_data; 30 | } 31 | else if (Database.Me.ProviderType == DatabaseProviderType.MSSQL) 32 | { 33 | commandList = DBMigration_MSSQL.GetCommandList(); 34 | objectSummarySql = DBMigration_MSSQL.GetObjectSummaryQuery(Database.Me.DatabaseName); 35 | pupulateDataSql = DBMigration_MSSQL.cmd_insert_all_basic_data; 36 | } 37 | else if (Database.Me.ProviderType == DatabaseProviderType.PGSQL) 38 | { 39 | commandList = DBMigration_PostgreSQL.GetCommandList(); 40 | objectSummarySql = DBMigration_PostgreSQL.GetObjectSummaryQuery(Database.Me.DatabaseName); 41 | pupulateDataSql = DBMigration_PostgreSQL.cmd_insert_all_basic_data; 42 | } 43 | else 44 | { 45 | QueueServer.Log("DBMigration failed due to unsupported database type"); 46 | return false; 47 | } 48 | 49 | // Check for tables, views and triggers 50 | // --------------------------------------------------------------------------------- 51 | int tablesFound = 0; 52 | int triggerFound = 0; 53 | int viewsFound = 0; 54 | using (DbCommand cmd = Database.Me.Connection.CreateCommand()) 55 | { 56 | cmd.CommandText = objectSummarySql; 57 | //QueueServer.Log($"DBMigration Executing command \n{objectSummarySql}"); 58 | using (DbDataReader reader = cmd.ExecuteReader()) 59 | { 60 | if (reader.HasRows) 61 | { 62 | reader.Read(); 63 | 64 | tablesFound = reader.IsDBNull(0) ? 0 : reader.GetInt32(0); 65 | viewsFound = reader.IsDBNull(1) ? 0 : reader.GetInt32(1); 66 | triggerFound = reader.IsDBNull(2) ? 0 : reader.GetInt32(2); 67 | } 68 | } 69 | } 70 | 71 | if (tablesFound == 7 && viewsFound == 3 && triggerFound == 1) 72 | { 73 | QueueServer.Log($"DBMigration found correct database objects"); 74 | return true; 75 | } 76 | else if (tablesFound != 7 && viewsFound != 3 && triggerFound != 1) 77 | { 78 | QueueServer.Log($"DBMigration creating database objects"); 79 | 80 | int affected0 = 0; 81 | using (DbCommand cmd = Database.Me.Connection.CreateCommand()) 82 | { 83 | foreach (string sqlCmd in commandList) 84 | { 85 | QueueServer.Log($"DBMigration Executing command \n{sqlCmd}"); 86 | 87 | cmd.CommandText = sqlCmd; 88 | affected0 = cmd.ExecuteNonQuery(); 89 | } 90 | } 91 | 92 | QueueServer.Log($"DBMigration populating basic data"); 93 | int affected1 = 0; 94 | using (DbCommand cmd = Database.Me.Connection.CreateCommand()) 95 | { 96 | QueueServer.Log($"DBMigration Executing command \n{pupulateDataSql}"); 97 | 98 | cmd.CommandText = pupulateDataSql; 99 | affected1 = cmd.ExecuteNonQuery(); 100 | } 101 | 102 | QueueServer.Log($"DBMigration completed successfully"); 103 | 104 | return true; 105 | } 106 | else 107 | { 108 | QueueServer.Log($"DBMigration found {tablesFound} tables, {viewsFound} views, {triggerFound} trigger"); 109 | return false; 110 | } 111 | } 112 | catch (Exception e) 113 | { 114 | QueueServer.Log("DBMigration failed due to exception: " + e.Message); 115 | } 116 | 117 | return false; 118 | } 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /QueueService/Dto/IpAccessList.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | namespace Tobasa.Dto 22 | { 23 | public class IpAccessList 24 | { 25 | public string IpAddressOld { get; set; } 26 | public string IpAddress { get; set; } 27 | public bool Allowed { get; set; } 28 | public string Keterangan { get; set; } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /QueueService/Dto/Login.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | using System; 22 | 23 | namespace Tobasa.Dto 24 | { 25 | public class Login 26 | { 27 | public int Id { get; set; } 28 | public string UsernameOld { get; set; } 29 | public string Username { get; set; } 30 | public string Password { get; set; } 31 | public DateTime Expired { get; set; } 32 | public bool Active { get; set; } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /QueueService/Dto/Post.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | namespace Tobasa.Dto 22 | { 23 | public class Post 24 | { 25 | public string NameOld { get; set; } 26 | public string Name { get; set; } 27 | public string NumberPrefix { get; set; } 28 | public string Keterangan { get; set; } 29 | public int Quota0 { get; set; } = 1000; 30 | public int Quota1 { get; set; } = 1000; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /QueueService/Dto/RunningText.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | namespace Tobasa.Dto 22 | { 23 | public class RunningText 24 | { 25 | public int Id { get; set; } 26 | public string StationName { get; set; } 27 | public bool Sticky { get; set; } 28 | public bool Active { get; set; } 29 | public string Text { get; set; } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /QueueService/Dto/Station.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | namespace Tobasa.Dto 22 | { 23 | public class Station 24 | { 25 | public string NameOld { get; set; } 26 | public string PostOld { get; set; } 27 | public string Name { get; set; } 28 | public string Post { get; set; } 29 | public string Keterangan { get; set; } 30 | public bool CanLogin { get; set; } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /QueueService/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | // General Information about an assembly is controlled through the following 5 | // set of attributes. Change these attribute values to modify the information 6 | // associated with an assembly. 7 | [assembly: AssemblyTitle("Tobasa Queue Service")] 8 | [assembly: AssemblyDescription("Tobasa Queue Service")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("Mangapul")] 11 | [assembly: AssemblyProduct("Tobasa Queue Service")] 12 | [assembly: AssemblyCopyright("Copyright © 2015-2025 Jefri Sibarani")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | 16 | // Setting ComVisible to false makes the types in this assembly not visible 17 | // to COM components. If you need to access a type in this assembly from 18 | // COM, set the ComVisible attribute to true on that type. 19 | [assembly: ComVisible(false)] 20 | 21 | // The following GUID is for the ID of the typelib if this project is exposed to COM 22 | [assembly: Guid("eac7bbbe-a58c-44d4-ba67-5ccd9c648acf")] 23 | 24 | // Version information for an assembly consists of the following four values: 25 | // 26 | // Major Version 27 | // Minor Version 28 | // Build Number 29 | // Revision 30 | // 31 | [assembly: AssemblyVersion("1.8.0.0")] 32 | [assembly: AssemblyFileVersion("1.8.0.0")] 33 | -------------------------------------------------------------------------------- /QueueService/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 2345 7 | 8 | 9 | C4BC3A3AC2D6D367A74580388B20BC069C96B048DFEAF5CCDC0CE1E25BF23F39 10 | 11 | 12 | 1000 13 | 14 | 15 | False 16 | 17 | 18 | ad7415644add93d6e719d2b593da6e6e 19 | 20 | 21 | <?xml version="1.0" encoding="utf-16"?> 22 | <SerializableConnectionString xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 23 | <ConnectionString>Data Source=127.0.0.1;User ID=antrian;Initial Catalog=antri;</ConnectionString> 24 | </SerializableConnectionString> 25 | Data Source=127.0.0.1;User ID=antrian;Initial Catalog=antri; 26 | 27 | 28 | <?xml version="1.0" encoding="utf-16"?> 29 | <SerializableConnectionString xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 30 | <ConnectionString>Server=127.0.0.1,1433;Database=antri;User ID=antrian;Trusted_Connection=False;</ConnectionString> 31 | </SerializableConnectionString> 32 | Server=127.0.0.1,1433;Database=antri;User ID=antrian;Trusted_Connection=False; 33 | 34 | 35 | <?xml version="1.0" encoding="utf-16"?> 36 | <SerializableConnectionString xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 37 | <ConnectionString>Data Source=.\Database\antri.db3;Version=3;</ConnectionString> 38 | </SerializableConnectionString> 39 | Data Source=.\Database\antri.db3;Version=3; 40 | 41 | 42 | <?xml version="1.0" encoding="utf-16"?> 43 | <SerializableConnectionString xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 44 | <ConnectionString>Host=127.0.0.1;Username=antrian;Database=antri;Port=5462;</ConnectionString> 45 | </SerializableConnectionString> 46 | Host=127.0.0.1;Username=antrian;Database=antri;Port=5462; 47 | 48 | 49 | SQLITE 50 | 51 | 52 | -------------------------------------------------------------------------------- /QueueService/QueueInstaller.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | using System.ComponentModel; 22 | using System.Configuration.Install; 23 | using System.ServiceProcess; 24 | 25 | namespace Tobasa 26 | { 27 | /// 28 | /// The service must be installed before it can execute. 29 | /// Services are installed with "installutil.exe" and uninstalled with "installutil.exe /u" with the service executable as the last parameter. 30 | /// For example, "c:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil QueueService.exe" will install the service to the Services Manager. 31 | /// 32 | [RunInstaller(true)] 33 | public class QueueInstaller: Installer 34 | { 35 | private ServiceInstaller serviceInstaller; 36 | private ServiceProcessInstaller processInstaller; 37 | 38 | public QueueInstaller() 39 | { 40 | // Instantiate installers for process and services. 41 | processInstaller = new ServiceProcessInstaller(); 42 | serviceInstaller = new ServiceInstaller(); 43 | 44 | // The services run under the system account. 45 | //processInstaller.Account = ServiceAccount.LocalSystem; 46 | processInstaller.Account = System.ServiceProcess.ServiceAccount.User; 47 | processInstaller.Password = null; 48 | processInstaller.Username = null; 49 | 50 | 51 | // The services are started automatically. 52 | serviceInstaller.StartType = ServiceStartMode.Automatic; 53 | serviceInstaller.DelayedAutoStart = true; 54 | 55 | // ServiceName must equal those on ServiceBase derived classes. 56 | serviceInstaller.ServiceName = "QueueService"; 57 | 58 | // displayed in list 59 | serviceInstaller.DisplayName = "QueueService"; 60 | 61 | // Add installers to collection. Order is not important. 62 | Installers.Add(serviceInstaller); 63 | Installers.Add(processInstaller); 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /QueueService/QueueInstaller.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | text/microsoft-resx 32 | 33 | 34 | 1.0.0.0 35 | 36 | 37 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3102.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 38 | 39 | 40 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3102.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 41 | 42 | 43 | -------------------------------------------------------------------------------- /QueueService/QueueService.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | publish\ 5 | 6 | 7 | 8 | 9 | 10 | en-US 11 | false 12 | 13 | -------------------------------------------------------------------------------- /QueueService/QueueService.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | text/microsoft-resx 32 | 33 | 34 | 1.0.0.0 35 | 36 | 37 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3102.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 38 | 39 | 40 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3102.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 41 | 42 | 43 | -------------------------------------------------------------------------------- /QueueService/Settings.cs: -------------------------------------------------------------------------------- 1 | namespace Tobasa.Properties { 2 | 3 | 4 | // This class allows you to handle specific events on the settings class: 5 | // The SettingChanging event is raised before a setting's value is changed. 6 | // The PropertyChanged event is raised after a setting's value is changed. 7 | // The SettingsLoaded event is raised after the setting values are loaded. 8 | // The SettingsSaving event is raised before the setting values are saved. 9 | internal sealed partial class Settings { 10 | 11 | public Settings() { 12 | // // To add event handlers for saving and changing settings, uncomment the lines below: 13 | // 14 | // this.SettingChanging += this.SettingChangingEventHandler; 15 | // 16 | // this.SettingsSaving += this.SettingsSavingEventHandler; 17 | // 18 | } 19 | 20 | private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { 21 | // Add code to handle the SettingChangingEvent event here. 22 | } 23 | 24 | private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { 25 | // Add code to handle the SettingsSaving event here. 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /QueueService/TicketHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Runtime.Remoting.Messaging; 4 | 5 | namespace Tobasa 6 | { 7 | class TicketHandler 8 | { 9 | public TicketHandler() 10 | { 11 | } 12 | 13 | public void OnMessage(DataReceivedEventArgs arg, Client client) 14 | { 15 | Exception exp = null; 16 | 17 | try 18 | { 19 | Message qmessage = new Message(arg); 20 | 21 | Logger.Log("[TicketHandler] Processing " + qmessage.MessageType.Text + " from " + client.RemoteInfo); 22 | 23 | // Handle TicketCreate 24 | if (qmessage.MessageType == Msg.TicketCreate && qmessage.Direction == MessageDirection.REQUEST) 25 | { 26 | MessageHandler< Dictionary > handler = new MessageHandler< Dictionary >(qmessage) 27 | { 28 | ReceiveHandler = new Func< Dictionary, Dictionary >(QueueRepository.CreateNewNumber), 29 | ResponseHandler = (session, result) => 30 | { 31 | // Send response to client 32 | if (result != null) 33 | { 34 | // Send response to client(caller) 35 | string message = Msg.TicketCreate.Text + 36 | Msg.Separator + "RES" + 37 | Msg.Separator + "Identifier" + 38 | Msg.Separator + result["postprefix"] + 39 | Msg.CompDelimiter + result["number"] + 40 | Msg.CompDelimiter + result["post"] + 41 | Msg.CompDelimiter + result["timestamp"]; 42 | session.Send(message); 43 | 44 | 45 | 46 | 47 | // Send message to all Display to update their total waiting queue 48 | string post = qmessage.PayloadValues["post"]; 49 | var queueInfo = QueueRepository.GetWaitingNumberAndPostSummary(post); 50 | if (queueInfo == null) 51 | { 52 | return; 53 | } 54 | 55 | string totalWaiting = queueInfo["numberLeft"]; 56 | 57 | 58 | string message1 = Msg.DisplayUpdateQueueLeft.Text + 59 | Msg.Separator + "REQ" + 60 | Msg.Separator + "Identifier" + 61 | Msg.Separator + post + 62 | Msg.CompDelimiter + totalWaiting; 63 | QueueServer.SendMessageToQueueDisplay(message1, post); 64 | 65 | // also to all Caller 66 | string message2 = Msg.CallerUpdateQueueLeft.Text + 67 | Msg.Separator + "REQ" + 68 | Msg.Separator + "Identifier" + 69 | Msg.Separator + post + 70 | Msg.CompDelimiter + totalWaiting; 71 | QueueServer.SendMessageToQueueCaller(message2, post); 72 | } 73 | } 74 | }; 75 | 76 | handler.Process(); 77 | } 78 | } 79 | catch(AppException ex) 80 | { 81 | exp = ex; 82 | } 83 | catch (Exception ex) 84 | { 85 | exp = ex; 86 | } 87 | 88 | if(exp != null) 89 | { 90 | Logger.Log("TicketHandler", exp); 91 | 92 | // SYS|NOTIFY|[Type!Message] 93 | string message = 94 | Msg.SysNotify.Text + 95 | Msg.Separator + "ERROR" + 96 | Msg.CompDelimiter + exp.Message; 97 | 98 | client.Session.Send(message); 99 | } 100 | } 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /QueueService/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /QueueService/queue.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueService/queue.ico -------------------------------------------------------------------------------- /QueueTicket/AppMain.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | using System; 22 | using System.Windows.Forms; 23 | 24 | namespace Tobasa 25 | { 26 | static class AppMain 27 | { 28 | [STAThread] 29 | static void Main() 30 | { 31 | Application.EnableVisualStyles(); 32 | Application.SetCompatibleTextRenderingDefault(false); 33 | 34 | Util.CheckUserConfigurationFile(); 35 | 36 | Logger.Log("-------------------------------------------------------------------------------"); 37 | Logger.Log("Starting " + Application.ProductName + " ..."); 38 | Logger.Log("From " + Util.ProcessPath); 39 | 40 | Application.Run(new MainForm()); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /QueueTicket/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | 4 | // General Information about an assembly is controlled through the following 5 | // set of attributes. Change these attribute values to modify the information 6 | // associated with an assembly. 7 | [assembly: AssemblyTitle("Tobasa Queue Ticket")] 8 | [assembly: AssemblyDescription("Tobasa Queue Ticket")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("Mangapul")] 11 | [assembly: AssemblyProduct("Tobasa Queue Ticket")] 12 | [assembly: AssemblyCopyright("Copyright © 2015-2025 Jefri Sibarani")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | 16 | // Setting ComVisible to false makes the types in this assembly not visible 17 | // to COM components. If you need to access a type in this assembly from 18 | // COM, set the ComVisible attribute to true on that type. 19 | [assembly: ComVisible(false)] 20 | 21 | // The following GUID is for the ID of the typelib if this project is exposed to COM 22 | [assembly: Guid("41db4ac3-870c-480b-95dd-231724ba7222")] 23 | 24 | // Version information for an assembly consists of the following four values: 25 | // 26 | // Major Version 27 | // Minor Version 28 | // Build Number 29 | // Revision 30 | // 31 | // You can specify all the values or you can default the Build and Revision Numbers 32 | // by using the '*' as shown below: 33 | // [assembly: AssemblyVersion("1.0.*")] 34 | [assembly: AssemblyVersion("1.8.0.0")] 35 | [assembly: AssemblyFileVersion("1.8.0.0")] 36 | -------------------------------------------------------------------------------- /QueueTicket/QueueTicket.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | publish\ 5 | 6 | 7 | 8 | 9 | 10 | en-US 11 | false 12 | 13 | -------------------------------------------------------------------------------- /QueueTicket/Resources/ButtonBlueOff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueTicket/Resources/ButtonBlueOff.png -------------------------------------------------------------------------------- /QueueTicket/Resources/ButtonBlueOn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueTicket/Resources/ButtonBlueOn.png -------------------------------------------------------------------------------- /QueueTicket/Resources/ButtonGreenOff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueTicket/Resources/ButtonGreenOff.png -------------------------------------------------------------------------------- /QueueTicket/Resources/ButtonGreenOn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueTicket/Resources/ButtonGreenOn.png -------------------------------------------------------------------------------- /QueueTicket/Resources/ButtonOrangeOff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueTicket/Resources/ButtonOrangeOff.png -------------------------------------------------------------------------------- /QueueTicket/Resources/ButtonOrangeOn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueTicket/Resources/ButtonOrangeOn.png -------------------------------------------------------------------------------- /QueueTicket/Resources/ButtonRedOff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueTicket/Resources/ButtonRedOff.png -------------------------------------------------------------------------------- /QueueTicket/Resources/ButtonRedOn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueTicket/Resources/ButtonRedOn.png -------------------------------------------------------------------------------- /QueueTicket/Resources/ButtonYellowOff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueTicket/Resources/ButtonYellowOff.png -------------------------------------------------------------------------------- /QueueTicket/Resources/ButtonYellowOn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueTicket/Resources/ButtonYellowOn.png -------------------------------------------------------------------------------- /QueueTicket/Resources/DisplayHeaderImg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueTicket/Resources/DisplayHeaderImg.png -------------------------------------------------------------------------------- /QueueTicket/Resources/MainBrandingImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueTicket/Resources/MainBrandingImage.png -------------------------------------------------------------------------------- /QueueTicket/Resources/MainLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueTicket/Resources/MainLogo.png -------------------------------------------------------------------------------- /QueueTicket/Resources/MenuLabelBg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueTicket/Resources/MenuLabelBg.png -------------------------------------------------------------------------------- /QueueTicket/Settings.cs: -------------------------------------------------------------------------------- 1 | namespace Tobasa.Properties { 2 | 3 | 4 | // This class allows you to handle specific events on the settings class: 5 | // The SettingChanging event is raised before a setting's value is changed. 6 | // The PropertyChanged event is raised after a setting's value is changed. 7 | // The SettingsLoaded event is raised after the setting values are loaded. 8 | // The SettingsSaving event is raised before the setting values are saved. 9 | internal sealed partial class Settings { 10 | 11 | public Settings() { 12 | // // To add event handlers for saving and changing settings, uncomment the lines below: 13 | // 14 | // this.SettingChanging += this.SettingChangingEventHandler; 15 | // 16 | // this.SettingsSaving += this.SettingsSavingEventHandler; 17 | // 18 | } 19 | 20 | private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { 21 | // Add code to handle the SettingChangingEvent event here. 22 | } 23 | 24 | private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { 25 | // Add code to handle the SettingsSaving event here. 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /QueueTicket/Work/AboutBox.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Sotware Antrian Tobasa 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation, either version 3 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License 17 | along with this program. If not, see . 18 | */ 19 | #endregion 20 | 21 | using System; 22 | using System.Reflection; 23 | using System.Windows.Forms; 24 | 25 | namespace Tobasa 26 | { 27 | partial class AboutBox : Form 28 | { 29 | public AboutBox() 30 | { 31 | InitializeComponent(); 32 | this.Text = String.Format("About {0}", AssemblyTitle); 33 | this.labelProductName.Text = AssemblyProduct; 34 | this.labelVersion.Text = String.Format("Version {0}", AssemblyVersion); 35 | this.labelCopyright.Text = AssemblyCopyright; 36 | this.labelCompanyName.Text = AssemblyCompany; 37 | this.textBoxDescription.Text = AssemblyDescription; 38 | } 39 | 40 | #region Assembly Attribute Accessors 41 | 42 | public string AssemblyTitle 43 | { 44 | get 45 | { 46 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); 47 | if (attributes.Length > 0) 48 | { 49 | AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; 50 | if (titleAttribute.Title != "") 51 | { 52 | return titleAttribute.Title; 53 | } 54 | } 55 | return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase); 56 | } 57 | } 58 | 59 | public string AssemblyVersion 60 | { 61 | get 62 | { 63 | return Assembly.GetExecutingAssembly().GetName().Version.ToString(); 64 | } 65 | } 66 | 67 | public string AssemblyDescription 68 | { 69 | get 70 | { 71 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); 72 | if (attributes.Length == 0) 73 | { 74 | return ""; 75 | } 76 | return ((AssemblyDescriptionAttribute)attributes[0]).Description; 77 | } 78 | } 79 | 80 | public string AssemblyProduct 81 | { 82 | get 83 | { 84 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); 85 | if (attributes.Length == 0) 86 | { 87 | return ""; 88 | } 89 | return ((AssemblyProductAttribute)attributes[0]).Product; 90 | } 91 | } 92 | 93 | public string AssemblyCopyright 94 | { 95 | get 96 | { 97 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); 98 | if (attributes.Length == 0) 99 | { 100 | return ""; 101 | } 102 | return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; 103 | } 104 | } 105 | 106 | public string AssemblyCompany 107 | { 108 | get 109 | { 110 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); 111 | if (attributes.Length == 0) 112 | { 113 | return ""; 114 | } 115 | return ((AssemblyCompanyAttribute)attributes[0]).Company; 116 | } 117 | } 118 | #endregion 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /QueueTicket/Work/RuntextLabel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | using System.Drawing; 4 | 5 | namespace Tobasa 6 | { 7 | class RuntextLabel : Label 8 | { 9 | private int CurrentPosition { get; set; } 10 | private Timer Timer { get; set; } 11 | SizeF stringSize = new SizeF(); 12 | float initialWidth = 0; 13 | float leftLimit = 0; 14 | public Timer timer = null; 15 | 16 | public RuntextLabel() 17 | { 18 | UseCompatibleTextRendering = true; 19 | CurrentPosition = 0; 20 | 21 | timer = new Timer(); 22 | timer.Interval = 25; 23 | timer.Tick += new EventHandler(Timer_Tick); 24 | timer.Start(); 25 | } 26 | 27 | void Timer_Tick(object sender, EventArgs e) 28 | { 29 | if (CurrentPosition <= (int)leftLimit) 30 | { 31 | CurrentPosition = Parent.Width; 32 | } 33 | else 34 | { 35 | CurrentPosition -= 1; 36 | } 37 | 38 | Invalidate(); 39 | } 40 | 41 | protected override void OnPaint(PaintEventArgs e) 42 | { 43 | if (initialWidth == 0) 44 | { 45 | // stringSize = e.Graphics.MeasureString(this.Text, this.Font); 46 | stringSize = TextRenderer.MeasureText(Text, Font); 47 | initialWidth = stringSize.Width; 48 | leftLimit = -initialWidth; 49 | } 50 | 51 | e.Graphics.TranslateTransform(CurrentPosition, 0); 52 | base.OnPaint(e); 53 | } 54 | 55 | protected override void Dispose(bool disposing) 56 | { 57 | if (disposing) 58 | { 59 | if (Timer != null) 60 | Timer.Dispose(); 61 | } 62 | Timer = null; 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /QueueTicket/Work/ToolUsageInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | 6 | namespace Tobasa 7 | { 8 | public class ToolUsageInfo 9 | { 10 | public static void ShowUsageInfo() 11 | { 12 | Form infoForm = new Form 13 | { 14 | Text = "Information", 15 | Width = 500, 16 | Height = 450, 17 | StartPosition = FormStartPosition.CenterScreen, 18 | FormBorderStyle = FormBorderStyle.FixedDialog, 19 | MaximizeBox = false, 20 | MinimizeBox = false 21 | }; 22 | 23 | WebBrowser webBrowser = new WebBrowser 24 | { 25 | Dock = DockStyle.Top, 26 | Height = 350, // Keep space for the button 27 | AllowNavigation = false, 28 | IsWebBrowserContextMenuEnabled = false, 29 | ScriptErrorsSuppressed = true 30 | }; 31 | 32 | 33 | string htmlContent = @" 34 | 35 | 36 | 41 | 49 | 50 | 51 |

QueueTicket

52 |

Secara default modul ini akan running full screen.

53 | Untuk keluar dari full screen, tekan tombol keyboard F
54 | Untuk kembali full screen, tekan tombol keyboard F
55 | Untuk masuk ke bagian pengaturan, tekan tombol Ctrl dan O secara bersamaan
56 | Untuk menutup tekan tombol Alt dan F4 secara bersamaan
57 |

58 |

Untuk info lebih lanjut buka www.mangapul.net

59 | 60 | "; 61 | 62 | webBrowser.DocumentText = htmlContent; 63 | 64 | // Attach event to allow JavaScript to call C# method 65 | webBrowser.ObjectForScripting = new ExplorerHelper(); 66 | 67 | 68 | Panel bottomPanel = new Panel 69 | { 70 | Dock = DockStyle.Bottom, 71 | Height = 50, 72 | Padding = new Padding(20, 2, 20, 2) 73 | }; 74 | 75 | CheckBox showNextTimeCheckBox = new CheckBox 76 | { 77 | Text = "Show this info dialog next time", 78 | AutoSize = true, 79 | Left = 20, 80 | Top = 25, 81 | Checked = true, 82 | }; 83 | 84 | Button closeButton = new Button 85 | { 86 | Text = "Close", 87 | AutoSize = true, 88 | Top = 15, 89 | Left = bottomPanel.Width - 120, 90 | Anchor = AnchorStyles.Right | AnchorStyles.Top 91 | }; 92 | closeButton.Click += (sender, e) => 93 | { 94 | bool showNextTime = showNextTimeCheckBox.Checked; 95 | Properties.Settings.Default.ShowInfoDialog = showNextTime; 96 | Properties.Settings.Default.Save(); 97 | infoForm.Close(); 98 | }; 99 | 100 | bottomPanel.Controls.Add(showNextTimeCheckBox); 101 | bottomPanel.Controls.Add(closeButton); 102 | 103 | infoForm.Controls.Add(webBrowser); 104 | infoForm.Controls.Add(bottomPanel); 105 | 106 | 107 | // Adjust closeButton position after form loads 108 | infoForm.Load += (s, e) => 109 | { 110 | closeButton.Left = bottomPanel.Width - closeButton.Width - 20; 111 | closeButton.Focus(); 112 | }; 113 | infoForm.AcceptButton = closeButton; 114 | 115 | infoForm.ShowDialog(); 116 | } 117 | } 118 | 119 | // Class to handle JavaScript call 120 | [System.Runtime.InteropServices.ComVisible(true)] 121 | public class ExplorerHelper 122 | { 123 | public void OpenFolder() 124 | { 125 | // Resolve environment variable %HOMEPATH% 126 | string homePath = Environment.ExpandEnvironmentVariables("C:%HOMEPATH%\\AppData\\Local\\Mangapul"); 127 | 128 | if (Directory.Exists(homePath)) 129 | { 130 | Process.Start("explorer.exe", homePath); 131 | } 132 | else 133 | { 134 | MessageBox.Show("Folder does not exist: " + homePath, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 135 | } 136 | } 137 | 138 | public void OpenBrowser() 139 | { 140 | try 141 | { 142 | Process.Start("www.mangapul.net"); 143 | } 144 | catch (Exception ex) 145 | { 146 | MessageBox.Show("Failed to open browser: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 147 | } 148 | } 149 | } 150 | 151 | } 152 | 153 | 154 | -------------------------------------------------------------------------------- /QueueTicket/queue.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jefrisibarani/tobasaqueue/1e2b88fd512befb6daa89bbfabc354b1f3ac1315/QueueTicket/queue.ico -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Software Antrian Tobasa 2 | http://www.mangapul.net/p/software-antrian-tobasa.html 3 | 4 | Software Antrian Open Source dan gratis. 5 | Software sistem antrian andal untuk mengelola antrian pelanggan, mengurangi waktu tunggu, 6 | meningkatkan kualitas layanan dan memaksimalkan kepuasan pelanggan. 7 | 8 | ## Kebutuhan minimal 9 | * Windows 7 Service Pack 1 10 | * Microsoft .NET Framework 4.6 11 | 12 | ## Build/Compile dari source code 13 | * Clone/download project source code dari https://github.com/jefrisibarani/tobasaqueue 14 | * Buka solution TobasaQueue.sln dengan Visual Studio 2022 15 | * Build solution, aplikasi yang telah dibuild ada di folder ***_OUTPUT*** 16 | 17 | #### Struktur folder output 18 | ``` 19 | _OUTPUT 20 | \---QueueAdmin 21 | \---QueueCaller 22 | \---QueueDisplay 23 | \---img 24 | \---movie 25 | \---wav 26 | \---QueueService 27 | \---Database 28 | \---QueueTicket 29 | \---img 30 | \---LICENSE 31 | \---QueueConfig.exe 32 | \---README.md 33 | \---startall_output.cmd 34 | ``` 35 | 36 | ## Instalasi 37 | Aplikasi yang telah dibuild/compile ada pada folder _OUTPUT, copy folder _OUTPUT ke folder lain: 38 | misalkan C:\AntrianTobasa 39 | 40 | Atau silahkan download versi binary dari: 41 | * https://github.com/jefrisibarani/tobasaqueue/releases 42 | * http://www.mangapul.net/2016/05/download-software-antrian-tobasa.html 43 | 44 | Lalu extract ke folder C:\AntrianTobasa 45 | 46 | 47 | #### Menampilkan file video 48 | Bila ingin menampilkan video pada QueueDisplay: 49 | Copykan file video (**format wmv**), atau format lainnya(bila codec sudah terinstall pada Windows) 50 | pada folder QueueDisplay\movie\ 51 | 52 | 53 | #### Menjalankan QueueService.exe sebagai Windows service (opsional) 54 | * Jalankan commmand prompt sebagai Administrator 55 | * Masuk ke dalam folder QueueService 56 | * Jalankan command berikut: 57 | ``` 58 | c:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil QueueService.exe 59 | ``` 60 | 61 | #### Untuk informasi/konfigurasi lebih lanjut 62 | * http://www.mangapul.net/p/software-antrian-tobasa.html 63 | * http://www.mangapul.net/2016/12/konfigurasi-aplikasi-antrian-tobasa.html 64 | 65 | 66 | #### Download .NET 67 | * https://dotnet.microsoft.com/download/dotnet-framework/net48 68 | 69 | 70 | ##### Copyright (C) 2025 Jefri Sibarani 71 | -------------------------------------------------------------------------------- /TobasaLib/DirectShowLib/DMODShow.cs: -------------------------------------------------------------------------------- 1 | #region license 2 | 3 | /* 4 | DirectShowLib - Provide access to DirectShow interfaces via .NET 5 | Copyright (C) 2007 6 | http://sourceforge.net/projects/directshownet/ 7 | 8 | This library is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU Lesser General Public 10 | License as published by the Free Software Foundation; either 11 | version 2.1 of the License, or (at your option) any later version. 12 | 13 | This library is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | Lesser General Public License for more details. 17 | 18 | You should have received a copy of the GNU Lesser General Public 19 | License along with this library; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #endregion 24 | 25 | using System; 26 | using System.Runtime.InteropServices; 27 | 28 | namespace DirectShowLib 29 | { 30 | #region Interfaces 31 | 32 | [ComImport, System.Security.SuppressUnmanagedCodeSecurity, 33 | Guid("52d6f586-9f0f-4824-8fc8-e32ca04930c2"), 34 | InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 35 | public interface IDMOWrapperFilter 36 | { 37 | [PreserveSig] 38 | int Init( 39 | [In, MarshalAs(UnmanagedType.LPStruct)] Guid clsidDMO, 40 | [In, MarshalAs(UnmanagedType.LPStruct)] Guid catDMO 41 | ); 42 | } 43 | 44 | #endregion 45 | } 46 | -------------------------------------------------------------------------------- /TobasaLib/DirectShowLib/DevEnum.cs: -------------------------------------------------------------------------------- 1 | #region license 2 | 3 | /* 4 | DirectShowLib - Provide access to DirectShow interfaces via .NET 5 | Copyright (C) 2007 6 | http://sourceforge.net/projects/directshownet/ 7 | 8 | This library is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU Lesser General Public 10 | License as published by the Free Software Foundation; either 11 | version 2.1 of the License, or (at your option) any later version. 12 | 13 | This library is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | Lesser General Public License for more details. 17 | 18 | You should have received a copy of the GNU Lesser General Public 19 | License along with this library; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #endregion 24 | 25 | using System; 26 | using System.Runtime.InteropServices; 27 | 28 | #if !USING_NET11 29 | using System.Runtime.InteropServices.ComTypes; 30 | #endif 31 | 32 | namespace DirectShowLib 33 | { 34 | #region Declarations 35 | 36 | /// 37 | /// From CDEF_CLASS_* defines 38 | /// 39 | [Flags] 40 | public enum CDef 41 | { 42 | None = 0, 43 | ClassDefault = 0x0001, 44 | BypassClassManager = 0x0002, 45 | ClassLegacy = 0x0004, 46 | MeritAboveDoNotUse = 0x0008, 47 | DevmonCMGRDevice = 0x0010, 48 | DevmonDMO = 0x0020, 49 | DevmonPNPDevice = 0x0040, 50 | DevmonFilter = 0x0080, 51 | DevmonSelectiveMask = 0x00f0 52 | } 53 | 54 | #endregion 55 | 56 | #region Interfaces 57 | 58 | [ComImport, System.Security.SuppressUnmanagedCodeSecurity, 59 | Guid("29840822-5B84-11D0-BD3B-00A0C911CE86"), 60 | InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 61 | public interface ICreateDevEnum 62 | { 63 | [PreserveSig] 64 | int CreateClassEnumerator( 65 | [In, MarshalAs(UnmanagedType.LPStruct)] Guid pType, 66 | #if USING_NET11 67 | [Out] out UCOMIEnumMoniker ppEnumMoniker, 68 | #else 69 | [Out] out IEnumMoniker ppEnumMoniker, 70 | #endif 71 | [In] CDef dwFlags); 72 | } 73 | 74 | #endregion 75 | } 76 | -------------------------------------------------------------------------------- /TobasaLib/DirectShowLib/IL21Dec.cs: -------------------------------------------------------------------------------- 1 | #region license 2 | 3 | /* 4 | DirectShowLib - Provide access to DirectShow interfaces via .NET 5 | Copyright (C) 2007 6 | http://sourceforge.net/projects/directshownet/ 7 | 8 | This library is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU Lesser General Public 10 | License as published by the Free Software Foundation; either 11 | version 2.1 of the License, or (at your option) any later version. 12 | 13 | This library is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | Lesser General Public License for more details. 17 | 18 | You should have received a copy of the GNU Lesser General Public 19 | License along with this library; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #endregion 24 | 25 | using System.Runtime.InteropServices; 26 | 27 | namespace DirectShowLib 28 | { 29 | #region Declarations 30 | 31 | /// 32 | /// From AM_LINE21_CCLEVEL 33 | /// 34 | public enum AMLine21CCLevel 35 | { 36 | TC2 = 0, 37 | } 38 | 39 | /// 40 | /// From AM_LINE21_CCSERVICE 41 | /// 42 | public enum AMLine21CCService 43 | { 44 | None = 0, 45 | Caption1, 46 | Caption2, 47 | Text1, 48 | Text2, 49 | XDS, 50 | DefChannel = 10, 51 | Invalid 52 | } 53 | 54 | /// 55 | /// From AM_LINE21_CCSTATE 56 | /// 57 | public enum AMLine21CCState 58 | { 59 | Off = 0, 60 | On 61 | } 62 | 63 | /// 64 | /// From AM_LINE21_DRAWBGMODE 65 | /// 66 | public enum AMLine21DrawBGMode 67 | { 68 | Opaque, 69 | Transparent 70 | } 71 | 72 | #endregion 73 | 74 | #region Interfaces 75 | 76 | [ComImport, System.Security.SuppressUnmanagedCodeSecurity, 77 | Guid("6E8D4A21-310C-11d0-B79A-00AA003767A7"), 78 | InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 79 | public interface IAMLine21Decoder 80 | { 81 | [PreserveSig] 82 | int GetDecoderLevel([Out] out AMLine21CCLevel lpLevel); 83 | 84 | [PreserveSig] 85 | int GetCurrentService([Out] out AMLine21CCService lpService); 86 | 87 | [PreserveSig] 88 | int SetCurrentService([In] AMLine21CCService Service); 89 | 90 | [PreserveSig] 91 | int GetServiceState([Out] out AMLine21CCState lpState); 92 | 93 | [PreserveSig] 94 | int SetServiceState([In] AMLine21CCState State); 95 | 96 | [PreserveSig] 97 | int GetOutputFormat([Out] BitmapInfoHeader lpbmih); 98 | 99 | [PreserveSig] 100 | int SetOutputFormat([In] BitmapInfoHeader lpbmih); 101 | 102 | [PreserveSig] 103 | int GetBackgroundColor([Out] out int pdwPhysColor); 104 | 105 | [PreserveSig] 106 | int SetBackgroundColor([In] int dwPhysColor); 107 | 108 | [PreserveSig] 109 | int GetRedrawAlways([Out, MarshalAs(UnmanagedType.Bool)] out bool lpbOption); 110 | 111 | [PreserveSig] 112 | int SetRedrawAlways([In, MarshalAs(UnmanagedType.Bool)] bool bOption); 113 | 114 | [PreserveSig] 115 | int GetDrawBackgroundMode([Out] out AMLine21DrawBGMode lpMode); 116 | 117 | [PreserveSig] 118 | int SetDrawBackgroundMode([In] AMLine21DrawBGMode Mode); 119 | } 120 | 121 | #endregion 122 | } 123 | -------------------------------------------------------------------------------- /TobasaLib/DirectShowLib/Misc.cs: -------------------------------------------------------------------------------- 1 | #region license 2 | 3 | /* 4 | DirectShowLib - Provide access to DirectShow interfaces via .NET 5 | Copyright (C) 2007 6 | http://sourceforge.net/projects/directshownet/ 7 | 8 | This library is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU Lesser General Public 10 | License as published by the Free Software Foundation; either 11 | version 2.1 of the License, or (at your option) any later version. 12 | 13 | This library is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | Lesser General Public License for more details. 17 | 18 | You should have received a copy of the GNU Lesser General Public 19 | License along with this library; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #endregion 24 | 25 | using System; 26 | using System.Runtime.InteropServices; 27 | 28 | #if !USING_NET11 29 | using System.Runtime.InteropServices.ComTypes; 30 | #endif 31 | 32 | namespace DirectShowLib 33 | { 34 | #region Declarations 35 | 36 | /// 37 | /// From KSMULTIPLE_ITEM - Note that data is returned in the memory IMMEDIATELY following this struct. 38 | /// The Size parm indicates ths size of the KSMultipleItem plus the extra bytes. 39 | /// 40 | [StructLayout(LayoutKind.Sequential)] 41 | public class KSMultipleItem 42 | { 43 | public int Size; 44 | public int Count; 45 | } 46 | 47 | #endregion 48 | 49 | #region Interfaces 50 | 51 | [ComImport, System.Security.SuppressUnmanagedCodeSecurity, 52 | Guid("00000109-0000-0000-C000-000000000046"), 53 | InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 54 | public interface IPersistStream : IPersist 55 | { 56 | #region IPersist Methods 57 | 58 | [PreserveSig] 59 | new int GetClassID([Out] out Guid pClassID); 60 | 61 | #endregion 62 | 63 | [PreserveSig] 64 | int IsDirty(); 65 | 66 | [PreserveSig] 67 | #if USING_NET11 68 | int Load([In] UCOMIStream pStm); 69 | #else 70 | int Load([In] IStream pStm); 71 | #endif 72 | 73 | [PreserveSig] 74 | int Save( 75 | #if USING_NET11 76 | [In] UCOMIStream pStm, 77 | #else 78 | [In] IStream pStm, 79 | #endif 80 | [In, MarshalAs(UnmanagedType.Bool)] bool fClearDirty); 81 | 82 | [PreserveSig] 83 | int GetSizeMax([Out] out long pcbSize); 84 | } 85 | 86 | [ComImport, System.Security.SuppressUnmanagedCodeSecurity, 87 | Guid("0000010c-0000-0000-C000-000000000046"), 88 | InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 89 | public interface IPersist 90 | { 91 | [PreserveSig] 92 | int GetClassID([Out] out Guid pClassID); 93 | } 94 | 95 | [ComImport, System.Security.SuppressUnmanagedCodeSecurity, 96 | Guid("b61178d1-a2d9-11cf-9e53-00aa00a216a1"), 97 | InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 98 | public interface IKsPin 99 | { 100 | /// 101 | /// The caller must free the returned structures, using the CoTaskMemFree function 102 | /// 103 | [PreserveSig] 104 | int KsQueryMediums( 105 | out IntPtr ip); 106 | } 107 | 108 | [ComImport, System.Security.SuppressUnmanagedCodeSecurity, 109 | Guid("B196B28B-BAB4-101A-B69C-00AA00341D07"), 110 | InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 111 | public interface ISpecifyPropertyPages 112 | { 113 | [PreserveSig] 114 | int GetPages(out DsCAUUID pPages); 115 | } 116 | 117 | [ComImport, System.Security.SuppressUnmanagedCodeSecurity, 118 | Guid("55272A00-42CB-11CE-8135-00AA004BB851"), 119 | InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 120 | public interface IPropertyBag 121 | { 122 | [PreserveSig] 123 | int Read( 124 | [In, MarshalAs(UnmanagedType.LPWStr)] string pszPropName, 125 | [Out, MarshalAs(UnmanagedType.Struct)] out object pVar, 126 | [In] IErrorLog pErrorLog 127 | ); 128 | 129 | [PreserveSig] 130 | int Write( 131 | [In, MarshalAs(UnmanagedType.LPWStr)] string pszPropName, 132 | [In, MarshalAs(UnmanagedType.Struct)] ref object pVar 133 | ); 134 | } 135 | 136 | [ComImport, System.Security.SuppressUnmanagedCodeSecurity, 137 | Guid("3127CA40-446E-11CE-8135-00AA004BB851"), 138 | InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 139 | public interface IErrorLog 140 | { 141 | [PreserveSig] 142 | int AddError( 143 | [In, MarshalAs(UnmanagedType.LPWStr)] string pszPropName, 144 | #if USING_NET11 145 | [In] EXCEPINFO pExcepInfo); 146 | #else 147 | [In] System.Runtime.InteropServices.ComTypes.EXCEPINFO pExcepInfo); 148 | #endif 149 | } 150 | 151 | #endregion 152 | } 153 | -------------------------------------------------------------------------------- /TobasaLib/DirectShowLib/Mixerocx.cs: -------------------------------------------------------------------------------- 1 | #region license 2 | 3 | /* 4 | DirectShowLib - Provide access to DirectShow interfaces via .NET 5 | Copyright (C) 2007 6 | http://sourceforge.net/projects/directshownet/ 7 | 8 | This library is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU Lesser General Public 10 | License as published by the Free Software Foundation; either 11 | version 2.1 of the License, or (at your option) any later version. 12 | 13 | This library is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | Lesser General Public License for more details. 17 | 18 | You should have received a copy of the GNU Lesser General Public 19 | License along with this library; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #endregion 24 | 25 | using System; 26 | using System.Runtime.InteropServices; 27 | 28 | namespace DirectShowLib 29 | { 30 | #region Declarations 31 | 32 | /// 33 | /// From MIXER_DATA_* defines 34 | /// 35 | [Flags] 36 | public enum MixerData 37 | { 38 | None = 0, 39 | AspectRatio = 0x00000001, // picture aspect ratio changed 40 | NativeSize = 0x00000002, // native size of video changed 41 | Palette = 0x00000004 // palette of video changed 42 | } 43 | 44 | /// 45 | /// From MIXER_STATE_* defines 46 | /// 47 | public enum MixerState 48 | { 49 | Mask = 0x00000003, // use this mask with state status bits 50 | Unconnected = 0x00000000, // mixer is unconnected and stopped 51 | ConnectedStopped = 0x00000001, // mixer is connected and stopped 52 | ConnectedPaused = 0x00000002, // mixer is connected and paused 53 | ConnectedPlaying = 0x00000003 // mixer is connected and playing 54 | } 55 | 56 | #endregion 57 | 58 | #region Interfaces 59 | 60 | [ComImport, System.Security.SuppressUnmanagedCodeSecurity, 61 | Guid("81A3BD31-DEE1-11d1-8508-00A0C91F9CA0"), 62 | InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 63 | public interface IMixerOCXNotify 64 | { 65 | [PreserveSig] 66 | int OnInvalidateRect([In] DsRect lpcRect); 67 | 68 | [PreserveSig] 69 | int OnStatusChange([In] MixerState ulStatusFlags); 70 | 71 | [PreserveSig] 72 | int OnDataChange([In] MixerData ulDataFlags); 73 | } 74 | 75 | [ComImport, System.Security.SuppressUnmanagedCodeSecurity, 76 | Guid("81A3BD32-DEE1-11d1-8508-00A0C91F9CA0"), 77 | InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 78 | public interface IMixerOCX 79 | { 80 | [PreserveSig] 81 | int OnDisplayChange( 82 | [In] int ulBitsPerPixel, 83 | [In] int ulScreenWidth, 84 | [In] int ulScreenHeight 85 | ); 86 | 87 | [PreserveSig] 88 | int GetAspectRatio( 89 | [Out] out int pdwPictAspectRatioX, 90 | [Out] out int pdwPictAspectRatioY 91 | ); 92 | 93 | [PreserveSig] 94 | int GetVideoSize( 95 | [Out] out int pdwVideoWidth, 96 | [Out] out int pdwVideoHeight 97 | ); 98 | 99 | [PreserveSig] 100 | int GetStatus([Out] out int pdwStatus); 101 | 102 | [PreserveSig] 103 | int OnDraw( 104 | [In] IntPtr hdcDraw, // HDC 105 | [In] DsRect prcDraw 106 | ); 107 | 108 | [PreserveSig] 109 | int SetDrawRegion( 110 | // While in theory this takes an LPPOINT, in practice 111 | // it must be NULL. 112 | [In] IntPtr lpptTopLeftSC, 113 | [In] DsRect prcDrawCC, 114 | [In] DsRect lprcClip 115 | ); 116 | 117 | [PreserveSig] 118 | int Advise([In] IMixerOCXNotify pmdns); 119 | 120 | [PreserveSig] 121 | int UnAdvise(); 122 | } 123 | 124 | #endregion 125 | } 126 | -------------------------------------------------------------------------------- /TobasaLib/DirectShowLib/PlayList.cs: -------------------------------------------------------------------------------- 1 | #region license 2 | 3 | /* 4 | DirectShowLib - Provide access to DirectShow interfaces via .NET 5 | Copyright (C) 2007 6 | http://sourceforge.net/projects/directshownet/ 7 | 8 | This library is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU Lesser General Public 10 | License as published by the Free Software Foundation; either 11 | version 2.1 of the License, or (at your option) any later version. 12 | 13 | This library is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | Lesser General Public License for more details. 17 | 18 | You should have received a copy of the GNU Lesser General Public 19 | License along with this library; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #endregion 24 | 25 | using System; 26 | using System.Runtime.InteropServices; 27 | 28 | namespace DirectShowLib 29 | { 30 | #region Declarations 31 | 32 | #if ALLOW_UNTESTED_INTERFACES 33 | 34 | /// 35 | /// From AMPlayListItemFlags 36 | /// 37 | public enum AMPlayListItemFlags 38 | { 39 | CanSkip = 0x1, 40 | CanBind = 0x2 41 | } 42 | 43 | /// 44 | /// From AMPlayListFlags 45 | /// 46 | [Flags] 47 | public enum AMPlayListFlags 48 | { 49 | None = 0, 50 | StartInScanMode = 0x1, 51 | ForceBanner = 0x2 52 | } 53 | 54 | #endif 55 | 56 | #endregion 57 | 58 | #region Interfaces 59 | 60 | #if ALLOW_UNTESTED_INTERFACES 61 | 62 | [ComImport, System.Security.SuppressUnmanagedCodeSecurity, 63 | Guid("56a868ff-0ad4-11ce-b03a-0020af0ba770"), 64 | InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 65 | public interface IAMPlayListItem 66 | { 67 | int GetFlags( 68 | out AMPlayListItemFlags pdwFlags 69 | ); 70 | 71 | int GetSourceCount( 72 | out int pdwSources 73 | ); 74 | 75 | int GetSourceURL( 76 | int dwSourceIndex, 77 | [MarshalAs(UnmanagedType.BStr)] out string pbstrURL 78 | ); 79 | 80 | int GetSourceStart( 81 | int dwSourceIndex, 82 | out long prtStart 83 | ); 84 | 85 | int GetSourceDuration( 86 | int dwSourceIndex, 87 | out long prtDuration 88 | ); 89 | 90 | int GetSourceStartMarker( 91 | int dwSourceIndex, 92 | out int pdwMarker 93 | ); 94 | 95 | int GetSourceEndMarker( 96 | int dwSourceIndex, 97 | out int pdwMarker 98 | ); 99 | 100 | int GetSourceStartMarkerName( 101 | int dwSourceIndex, 102 | [MarshalAs(UnmanagedType.BStr)] out string pbstrStartMarker 103 | ); 104 | 105 | int GetSourceEndMarkerName( 106 | int dwSourceIndex, 107 | [MarshalAs(UnmanagedType.BStr)] out string pbstrEndMarker 108 | ); 109 | 110 | int GetLinkURL( 111 | [MarshalAs(UnmanagedType.BStr)] out string pbstrURL); 112 | 113 | int GetScanDuration( 114 | int dwSourceIndex, 115 | out long prtScanDuration 116 | ); 117 | } 118 | 119 | [ComImport, System.Security.SuppressUnmanagedCodeSecurity, 120 | Guid("56a868fe-0ad4-11ce-b03a-0020af0ba770"), 121 | InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 122 | public interface IAMPlayList 123 | { 124 | int GetFlags( 125 | out AMPlayListFlags pdwFlags 126 | ); 127 | 128 | int GetItemCount( 129 | out int pdwItems 130 | ); 131 | 132 | int GetItem( 133 | int dwItemIndex, 134 | out IAMPlayListItem ppItem 135 | ); 136 | 137 | int GetNamedEvent( 138 | string pwszEventName, 139 | int dwItemIndex, 140 | out IAMPlayListItem ppItem, 141 | out AMPlayListItemFlags pdwFlags 142 | ); 143 | 144 | int GetRepeatInfo( 145 | out int pdwRepeatCount, 146 | out int pdwRepeatStart, 147 | out int pdwRepeatEnd 148 | ); 149 | } 150 | 151 | [ComImport, System.Security.SuppressUnmanagedCodeSecurity, 152 | Guid("4C437B91-6E9E-11d1-A704-006097C4E476"), 153 | InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 154 | public interface ISpecifyParticularPages 155 | { 156 | int GetPages( 157 | [In, MarshalAs(UnmanagedType.LPStruct)] Guid guidWhatPages, 158 | out DsCAUUID pPages 159 | ); 160 | } 161 | 162 | [ComImport, System.Security.SuppressUnmanagedCodeSecurity, 163 | Guid("02EF04DD-7580-11d1-BECE-00C04FB6E937"), 164 | InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 165 | public interface IAMRebuild 166 | { 167 | int RebuildNow( ); 168 | }; 169 | 170 | #endif 171 | 172 | #endregion 173 | } 174 | -------------------------------------------------------------------------------- /TobasaLib/DirectShowLib/RegBag.cs: -------------------------------------------------------------------------------- 1 | #region license 2 | 3 | /* 4 | DirectShowLib - Provide access to DirectShow interfaces via .NET 5 | Copyright (C) 2007 6 | http://sourceforge.net/projects/directshownet/ 7 | 8 | This library is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU Lesser General Public 10 | License as published by the Free Software Foundation; either 11 | version 2.1 of the License, or (at your option) any later version. 12 | 13 | This library is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | Lesser General Public License for more details. 17 | 18 | You should have received a copy of the GNU Lesser General Public 19 | License along with this library; if not, write to the Free Software 20 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #endregion 24 | 25 | using System; 26 | using System.Runtime.InteropServices; 27 | 28 | namespace DirectShowLib 29 | { 30 | #region Interfaces 31 | 32 | [ComImport, System.Security.SuppressUnmanagedCodeSecurity, 33 | Guid("8A674B48-1F63-11d3-B64C-00C04F79498E"), 34 | InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 35 | public interface ICreatePropBagOnRegKey 36 | { 37 | [PreserveSig] 38 | int Create( 39 | [In] IntPtr hkey, 40 | [In, MarshalAs(UnmanagedType.LPWStr)] string subkey, 41 | [In] int ulOptions, 42 | [In] int samDesired, 43 | [In, MarshalAs(UnmanagedType.LPStruct)] Guid iid, 44 | [Out, MarshalAs(UnmanagedType.IUnknown)] out object ppBag 45 | ); 46 | } 47 | 48 | #endregion 49 | } 50 | -------------------------------------------------------------------------------- /TobasaLib/DirectShowLib/readme.txt: -------------------------------------------------------------------------------- 1 | DirectShowLibNET - A library to allow .NET applications to use DirectShow functions 2 | 3 | ===================================== NOTE! ====================================== 4 | 5 | All the samples have been removed from this package and moved to their own at: 6 | 7 | http://sourceforge.net/project/showfiles.php?group_id=136334&package_id=188409 8 | 9 | ================================================================================== 10 | 11 | Here's where to find things: 12 | 13 | - The documentation is located in docs\readme.rtf and can be read with WordPad, MS Word, etc. 14 | - A description of what has changed since the last version can be found in WhatsNew.txt. 15 | - A retail build of the library containing all tested interfaces can be found in lib. 16 | - The list of interfaces indicating which are tested or untested can be found in docs\interfaces.txt 17 | - The complete source code with definitions for all interfaces (tested and untested) can be found in src\*.* 18 | 19 | Licensed under Lesser General Public License. See license.txt for details. 20 | http://directshownet.sourceforge.net 21 | -------------------------------------------------------------------------------- /TobasaLib/LibTobasa.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | ShowAllFiles 5 | 6 | -------------------------------------------------------------------------------- /TobasaLib/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Tobasa Library")] 9 | [assembly: AssemblyDescription("Tobasa Library")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("Mangapul")] 12 | [assembly: AssemblyProduct("Tobasa Library")] 13 | [assembly: AssemblyCopyright("Copyright © 2015-2025 Jefri Sibarani")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("175f9423-51bd-458b-99e0-d25925a1c7bd")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.8.0.0")] 36 | [assembly: AssemblyFileVersion("1.8.0.0")] 37 | -------------------------------------------------------------------------------- /TobasaLib/README.md: -------------------------------------------------------------------------------- 1 | # Tobasa Library 2 | 3 | https://github.com/jefrisibarani/tobasaqueue 4 | http://www.mangapul.net/p/software-antrian-tobasa.html 5 | 6 | 7 | A lightweight library used by the Tobasa Queue System. 8 | 9 | It provides an asynchronous TCP queue server, a DirectShow wrapper, a simple database query wrapper, and a logging utility class 10 | 11 | 12 | ##### Copyright (C) 2015-2025 Jefri Sibarani -------------------------------------------------------------------------------- /TobasaLib/Work/AppException.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Tobasa Library - Provide Async TCP server, DirectShow wrapper and simple Logger class 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This library is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2.1 of the License, or (at your option) any later version. 10 | 11 | This library is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this library; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 | */ 20 | #endregion 21 | 22 | using System; 23 | using System.Globalization; 24 | 25 | namespace Tobasa 26 | { 27 | public class AppException : Exception 28 | { 29 | public AppException() : base() {} 30 | 31 | public AppException(string message) : base(message) { } 32 | 33 | public AppException(string message, params object[] args) 34 | : base(String.Format(CultureInfo.CurrentCulture, message, args)) 35 | { 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /TobasaLib/Work/Logger.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Tobasa Library - Provide Async TCP server, DirectShow wrapper and simple Logger class 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This library is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2.1 of the License, or (at your option) any later version. 10 | 11 | This library is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this library; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 | */ 20 | #endregion 21 | 22 | using System; 23 | using System.IO; 24 | using System.Windows.Forms; 25 | 26 | namespace Tobasa 27 | { 28 | public class Logger 29 | { 30 | private static string _logFile; 31 | private static readonly object _locker = new object(); 32 | 33 | // Init log file in temporary folder 34 | public Logger() 35 | { 36 | _logFile = GetTempFilePath(); 37 | } 38 | 39 | private static string GetTempFilePath() 40 | { 41 | string filename = Path.GetFileNameWithoutExtension(Application.ExecutablePath); 42 | string newFile = Path.GetTempPath() + filename + ".log"; 43 | return newFile; 44 | } 45 | 46 | public static string LogFile 47 | { 48 | get { return _logFile; } 49 | set { _logFile = value; } 50 | } 51 | 52 | // Log message to file, rotate everyday 53 | public static void Log(string source, string message) 54 | { 55 | Log(string.Format("[{0}] {1}", source, message)); 56 | } 57 | 58 | public static void Log(string source, Exception exp) 59 | { 60 | Log(string.Format("[{0}] {1}: {2}", source, exp.GetType().Name, exp.Message)); 61 | } 62 | 63 | public static void Log(NotifyEventArgs arg) 64 | { 65 | Logger.Log(string.Format("[{0}] {1} : {2}", arg.Source, arg.Summary, arg.Message)); 66 | } 67 | 68 | public static void Log(string message) 69 | { 70 | lock (_locker) 71 | { 72 | // No logFile defined, use temporary file in %TEMP% 73 | if (_logFile == null) 74 | Logger.LogFile = GetTempFilePath(); 75 | 76 | if (File.Exists(_logFile)) 77 | { 78 | DateTime dt = File.GetLastAccessTime(_logFile); 79 | if (dt.Date != DateTime.Now.Date) 80 | { 81 | // rename the file 82 | 83 | string oldDate = dt.ToString("yyyyMMdd_HHmmss"); 84 | string oldName = Path.GetFileNameWithoutExtension(_logFile); 85 | string newName = oldDate + "_" + oldName; // without file extension 86 | 87 | string oldNameFull = Path.GetFullPath(_logFile); 88 | string newNameFull = Path.GetDirectoryName(_logFile)+ @"\" + newName + ".log"; 89 | try 90 | { 91 | File.Move(oldNameFull, newNameFull); 92 | } 93 | catch (Exception e) 94 | { 95 | using (StreamWriter SW = File.AppendText(GetTempFilePath())) 96 | { 97 | string msg = DateTime.Now.ToString("yyyy-MM-dd") + " " + DateTime.Now.ToString("HH:mm:ss") + " : " + e.ToString(); 98 | SW.WriteLine(msg); 99 | } 100 | } 101 | } 102 | } 103 | 104 | try 105 | { 106 | using (StreamWriter SW = File.AppendText(_logFile)) 107 | { 108 | string msg = DateTime.Now.ToString("yyyy-MM-dd") + " " + DateTime.Now.ToString("HH:mm:ss") + " : " + message; 109 | SW.WriteLine(msg); 110 | } 111 | } 112 | catch (Exception ex) 113 | { 114 | using (StreamWriter SW = File.AppendText( GetTempFilePath() )) 115 | { 116 | string msg = DateTime.Now.ToString("yyyy-MM-dd") + " " + DateTime.Now.ToString("HH:mm:ss") + " : " + message; 117 | SW.WriteLine(msg); 118 | } 119 | } 120 | } 121 | } 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /TobasaLib/Work/MessageHandler.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Tobasa Library - Provide Async TCP server, DirectShow wrapper and simple Logger class 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This library is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2.1 of the License, or (at your option) any later version. 10 | 11 | This library is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this library; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 | */ 20 | #endregion 21 | 22 | using System; 23 | using System.Collections.Generic; 24 | 25 | namespace Tobasa 26 | { 27 | public class MessageHandler 28 | { 29 | public MessageHandler(Message qmessage) 30 | { 31 | Message = qmessage; 32 | } 33 | 34 | public Message Message 35 | { 36 | get; 37 | set; 38 | } 39 | 40 | public void Process() 41 | { 42 | if (ReceiveHandler != null) 43 | { 44 | // Execute receiveHandler 45 | TReceiveReturnType retVal = ReceiveHandler(Message.PayloadValues); 46 | 47 | // Execute responseHandler, passing return Client and receiveHandler's return value 48 | ResponseHandler?.Invoke(Message.Session, retVal); 49 | } 50 | } 51 | 52 | // actual function to process request from Client 53 | public Func< Dictionary , TReceiveReturnType > ReceiveHandler; 54 | 55 | // actual function to send response to Client 56 | public Action ResponseHandler; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /TobasaLib/Work/Notifier.cs: -------------------------------------------------------------------------------- 1 | #region License 2 | /* 3 | Tobasa Library - Provide Async TCP server, DirectShow wrapper and simple Logger class 4 | Copyright (C) 2015-2025 Jefri Sibarani 5 | 6 | This library is free software; you can redistribute it and/or 7 | modify it under the terms of the GNU Lesser General Public 8 | License as published by the Free Software Foundation; either 9 | version 2.1 of the License, or (at your option) any later version. 10 | 11 | This library is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 | Lesser General Public License for more details. 15 | 16 | You should have received a copy of the GNU Lesser General Public 17 | License along with this library; if not, write to the Free Software 18 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 | */ 20 | #endregion 21 | 22 | using System; 23 | 24 | namespace Tobasa 25 | { 26 | public enum NotifyType 27 | { 28 | NOTIFY_LOG, 29 | NOTIFY_MSG, 30 | NOTIFY_ERR 31 | } 32 | 33 | public class NotifyEventArgs : EventArgs 34 | { 35 | public NotifyEventArgs() 36 | { 37 | Type = NotifyType.NOTIFY_MSG; 38 | } 39 | 40 | public NotifyType Type { get; set; } 41 | public string Summary { get; set; } 42 | public string Source { get; set; } 43 | public string Message { get; set; } 44 | public Exception Exception { get; set; } 45 | } 46 | 47 | /** Notifier class. 48 | Raise notify event by calling Notify() 49 | */ 50 | public class Notifier 51 | { 52 | public event Action Notified; 53 | protected virtual void OnNotifyError(NotifyEventArgs e) 54 | { 55 | e.Type = NotifyType.NOTIFY_ERR; 56 | OnNotify(e); 57 | } 58 | 59 | protected virtual void OnNotifyError(Exception ex) 60 | { 61 | NotifyEventArgs args = new NotifyEventArgs(); 62 | args.Summary = ex.GetType().Name; 63 | args.Source = ex.Source; 64 | args.Message = ex.Message; 65 | args.Exception = ex; 66 | args.Type = NotifyType.NOTIFY_ERR; 67 | 68 | OnNotify(args); 69 | } 70 | 71 | protected virtual void OnNotifyError(string source, Exception ex) 72 | { 73 | NotifyEventArgs args = new NotifyEventArgs(); 74 | args.Summary = ex.GetType().Name; 75 | args.Source = source; 76 | args.Message = ex.Message; 77 | args.Exception = ex; 78 | args.Type = NotifyType.NOTIFY_ERR; 79 | 80 | OnNotify(args); 81 | } 82 | 83 | protected virtual void OnNotifyMessage(NotifyEventArgs e) 84 | { 85 | e.Type = NotifyType.NOTIFY_MSG; 86 | OnNotify(e); 87 | } 88 | 89 | protected virtual void OnNotifyMessage(string source, string message, string summary="Info") 90 | { 91 | NotifyEventArgs args = new NotifyEventArgs(); 92 | args.Summary = summary; 93 | args.Source = source; 94 | args.Message = message; 95 | args.Exception = null; 96 | args.Type = NotifyType.NOTIFY_MSG; 97 | 98 | OnNotify(args); 99 | } 100 | 101 | protected virtual void OnNotifyLog(string source, string message, string summary = "Info") 102 | { 103 | NotifyEventArgs args = new NotifyEventArgs(); 104 | args.Summary = summary; 105 | args.Source = source; 106 | args.Message = message; 107 | args.Exception = null; 108 | args.Type = NotifyType.NOTIFY_LOG; 109 | 110 | OnNotify(args); 111 | } 112 | 113 | protected virtual void OnNotifyLog(string source, Exception ex) 114 | { 115 | NotifyEventArgs args = new NotifyEventArgs(); 116 | args.Summary = ex.GetType().Name; 117 | args.Source = source; 118 | args.Message = ex.Message; 119 | args.Exception = ex; 120 | args.Type = NotifyType.NOTIFY_LOG; 121 | 122 | OnNotify(args); 123 | } 124 | 125 | protected virtual void OnNotify(NotifyEventArgs e) 126 | { 127 | Notified?.Invoke(e); 128 | } 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /TobasaLib/app.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /TobasaLib/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/features.txt: -------------------------------------------------------------------------------- 1 | * Software Antrian Open Source dan gratis. 2 | * Support database SQLite 3, MySQL, PostgreSQL, MSSQL 3 | * Settingan default menggunakan database SQLite 3, 4 | sehingga tidak perlu menginstall/menggunakan SQL Server Engine lainnya. 5 | * Tersedia tool untuk mengubah pengunaan jenis database dan Queue Server. 6 | * Melayani hingga 10 POS layanan 7 | * Settingan default satu POS layanan dengan sepuluh loket/counter 8 | * Modul Display dan Tiket dapat menampilkan minimal tiga POS layanan 9 | * POS layanan yang tampil pada Modul Display dan Tiket dapat diatur dengan mudah. 10 | * Nama-nama POS layanan dan Menu tiket dapat diubah dengan mudah 11 | * Branding/Logo pada aplikasi dapat diubah dengan mudah 12 | * Layout modul Display dan Tiket dapat diatur dengan mudah 13 | * Running text pada modul Display dan Tiket 14 | * Mengubah/menambah running text dengan mudah 15 | * Theme pada modul Display dan Tiket 16 | * Dokumentasi yang lengkap tersedia pada www.mangapul.net 17 | 18 | Modul Tiket 19 | * Menampilkan minimal tiga POS layanan 20 | * Mencetak ke kertas ukutan 8 cm 21 | * Pengaturan jumlah print out yang berbeda untuk masing-masing POS layanan 22 | * Pengaturan audio, visibilitas, print out tiket, spesifik untuk masing-masing POS layanan 23 | 24 | Modul Caller 25 | * Dapat memanggil ke seluruh POS 26 | * Memanggil kembali nomor yang sudah terpanggil di loket/counter lain pada POS yang sama 27 | 28 | Module Admin 29 | * Pengaturan akses komputer client 30 | * Pengaturan ID modul-modul client 31 | * Pengaturan user/password Module Server 32 | * Pengaturan kode-kode POS 33 | * Pengaturan running text Modul Display 34 | * Encryption tool untuk user/password 35 | 36 | Modul Display 37 | * Menampilkan minimal tiga POS layanan 38 | * Support penggunaan komputer dengan dua monitor 39 | * Panggilan audio 40 | * Text dan audio Loket bisa diganti dengan Counter 41 | * Menampilkan Video atau siaran TV 42 | * Pengaturan audio, visibilitas, spesifik untuk masing-masing POS layanan 43 | * Pengaturan lengkap untuk video dan panggilan audio 44 | 45 | Modul Service/Server 46 | * Dapat membatasi koneksi komputer client 47 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | # Software Antrian Tobasa 2 | http://www.mangapul.net/p/software-antrian-tobasa.html 3 | 4 | Software Antrian Open Source dan gratis. 5 | Software sistem antrian andal untuk mengelola antrian pelanggan, mengurangi waktu tunggu, 6 | meningkatkan kualitas layanan dan memaksimalkan kepuasan pelanggan. 7 | 8 | ## Kebutuhan minimal 9 | * Windows 7 Service Pack 1 10 | * Microsoft .NET Framework 4.6 11 | 12 | ## Build/Compile dari source code 13 | * Clone/download project source code dari https://github.com/jefrisibarani/tobasaqueue 14 | * Buka solution TobasaQueue.sln dengan Visual Studio 2022 15 | * Build solution, aplikasi yang telah dibuild ada di folder ***_OUTPUT*** 16 | 17 | #### Struktur folder output 18 | ``` 19 | _OUTPUT 20 | \---QueueAdmin 21 | \---QueueCaller 22 | \---QueueDisplay 23 | \---img 24 | \---movie 25 | \---wav 26 | \---QueueService 27 | \---Database 28 | \---QueueTicket 29 | \---img 30 | \---LICENSE 31 | \---QueueConfig.exe 32 | \---README.md 33 | \---startall_output.cmd 34 | ``` 35 | 36 | ## Instalasi 37 | Aplikasi yang telah dibuild/compile ada pada folder _OUTPUT, copy folder _OUTPUT ke folder lain: 38 | misalkan C:\AntrianTobasa 39 | 40 | Atau silahkan download versi binary dari: 41 | * https://github.com/jefrisibarani/tobasaqueue/releases 42 | * http://www.mangapul.net/2016/05/download-software-antrian-tobasa.html 43 | 44 | Lalu extract ke folder C:\AntrianTobasa 45 | 46 | 47 | #### Menampilkan file video 48 | Bila ingin menampilkan video pada QueueDisplay: 49 | Copykan file video (**format wmv**), atau format lainnya(bila codec sudah terinstall pada Windows) 50 | pada folder QueueDisplay\movie\ 51 | 52 | 53 | #### Menjalankan QueueService.exe sebagai Windows service (opsional) 54 | * Jalankan commmand prompt sebagai Administrator 55 | * Masuk ke dalam folder QueueService 56 | * Jalankan command berikut: 57 | ``` 58 | c:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil QueueService.exe 59 | ``` 60 | 61 | #### Untuk informasi/konfigurasi lebih lanjut 62 | * http://www.mangapul.net/p/software-antrian-tobasa.html 63 | * http://www.mangapul.net/2016/12/konfigurasi-aplikasi-antrian-tobasa.html 64 | 65 | 66 | #### Download .NET 67 | * https://dotnet.microsoft.com/download/dotnet-framework/net48 68 | 69 | 70 | ##### Copyright (C) 2025 Jefri Sibarani 71 | -------------------------------------------------------------------------------- /docs/todo.txt: -------------------------------------------------------------------------------- 1 | Porting ke .NET 6 2 | Android app client 3 | Web app untuk reporting/dashboard antrian -------------------------------------------------------------------------------- /startall_output.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | SETLOCAL 4 | SET OUTPUTDIR=%~dp0 5 | 6 | cd %OUTPUTDIR%\QueueService 7 | start QueueService.exe 8 | 9 | ping 192.0.2.2 -n 1 -w 900 > nul 10 | cd %OUTPUTDIR%\QueueAdmin 11 | start QueueAdmin.exe 12 | 13 | ping 192.0.2.2 -n 1 -w 500 > nul 14 | cd %OUTPUTDIR%\QueueCaller 15 | start QueueCaller.exe 16 | 17 | ping 192.0.2.2 -n 1 -w 500 > nul 18 | cd %OUTPUTDIR%\QueueDisplay 19 | start QueueDisplay.exe 20 | 21 | ping 192.0.2.2 -n 1 -w 500 > nul 22 | cd %OUTPUTDIR%\QueueTicket 23 | start QueueTicket.exe 24 | 25 | cd %OUTPUTDIR% --------------------------------------------------------------------------------