├── .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%
--------------------------------------------------------------------------------