作者holishing ( )
看板PttBug
標題Re: [問題] 賭盤下注扣錢後沒有成功下注
時間Wed May 30 20:09:35 2018
※ 引述《idooo (愛賭才會贏)》之銘言:
: 賭盤下注後會出現"買了彩券囉~~~~~~"的畫面,
: 如果沒按任意鍵跳出這個畫面,而直接斷線的話會被吃錢;
: 個人記錄中的最近交易記錄會有這筆扣錢的記錄,
: 但賭盤開獎的記錄不會出現買了彩券的記錄。
: ---
: 然後我就被吃了100100元了XD
先記錄自己實際測試後的看法
相關修正已去 github 發 pull request, 還麻煩協助檢查
https://github.com/ptt/pttbbs/pull/48
測試完對照附錄(*)的內容後
應該是因為這樣的程序:
> ------------------
1. user 確認下注
↓
2.
user 付錢
( pay() 函式 )
↓
3.
顯示 ~/etc/buyticket (「下注成功囉~~~~」)
以及 「請按任意鍵繼續」
( show_file() 及 pressanykey() 函式 )
↓
4.
系統寫進下注記錄 ( ~/etc/ticket*...等檔案 )
↓
5. 回去下注畫面
> ------------------
因此 user 若在步驟3 斷線,會造成記錄不一致的情形
所以覺得 步驟 2. 3. 順序調換,變成
> ------------------
1. user 確認下注
↓
2.
顯示 ~/etc/buyticket 以及 「請按任意鍵繼續」
( show_file() 及 pressanykey() 函式 )
↓
3.
user 付錢
( pay() 函式 )
↓
4.
系統寫進下注記錄 ( ~/etc/ticket*...等檔案 )
↓
5. 回去下注畫面
> ------------------
應該可以解決這情形
不過
這樣可能就變成使用者買了彩券本來已經看到成功的畫面
然後不小心斷線
然後又等於什麼事都沒做...
所以相關檔案(~/etc/buyticket)方面
可能也要把
. . )))((( . .
.
. . ▄★▄ 彩 ║ .
.
q-⊙⊙-p 券 ║.
. . ╰ ︶ ╯ ║ .
<< : // . .
┘└
買了彩券囉~~~~~~
這個訊息改成比較合理的提示
像是
. . )))((( . .
.
. . ▄★▄ 彩 ║ .
.
q-⊙⊙-p 券 ║.
. . ╰ ︶ ╯ ║ .
<< : // . .
┘└
購買彩券中......
. . )))((( . .
.
. . ▄★▄ 彩 ║ .
.
q-⊙⊙-p 券 ║.
. . ╰ ︶ ╯ ║ .
<< : // . .
┘└
下注中..._
之類的 (反正底下還有「請按任意鍵繼續」的提示)
可能更好
雖然一般情況下使用者不會感受/在意到這樣的差異...
* 附錄:(以購買「全站彩券」為例)
===================================================
strace: Process 951 attached
read(0, "3", 127) = 1
> 我開始買 3 號彩券
writev(1,
[{iov_base="\r\275\320\277\357\276\334\255n\301\312\266R\252\272\272\330\303\376(1~8)[Q:\302\367\266}]"...,
iov_len=74}], 1) = 74
read(0, "0", 127) = 1
writev(1, [{iov_base="\10\33[0;7m10 \33[m\33[23;16H", iov_len=23}], 1) = 23
read(0, "0", 127) = 1
writev(1, [{iov_base="\33[23;14H\33[0;7m100 \33[m\33[23;17H", iov_len=30}],
1) = 30
read(0, "\r", 127) = 1
> 買 100 張 3 號彩券
openat(AT_FDCWD, "/home/bbs/.PASSWDS", O_WRONLY) = 3
lseek(3, 120, SEEK_SET) = 120
write(3, "\244\236\232;", 4) = 4
close(3) = 0
> 寫入全站的帳號檔 (.PASSWDS)
stat("home/s/sysop/money.recent", 0x7ffe268e2d78) = -1 ENOENT (No such file
or directory)
> 寫入自己的交易記錄 (喔第一次交易所以這邊顯示 No such file or directory
openat(AT_FDCWD, "
etc/buyticket", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=16, ...}) = 0
read(3, "\nU buy ticket!\n\n", 4096) = 16
read(3, "", 4096) = 0
close(3) = 0
writev(1, [{iov_base="\33[6;1H\33[K\nU buy ticket!\33[K\n\r\33[K\n"...,
iov_len=179}], 1) = 179
> 顯示 「買了彩券囉~~~~~~」 !!!
======================================================= Bug 回報提到的時間點
read(0, "\r", 127) = 1
> 假設 user 沒有斷線繼續下去
nanosleep({tv_sec=0, tv_nsec=100000000}, NULL) = 0
> buy_ticket_ui() 結束
stat("etc//ticket", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
openat(AT_FDCWD, "etc//ticket.user", O_WRONLY|O_CREAT|O_APPEND, 0644) = 3
write(3, "sysop 2 100\n", 12) = 12
close(3) = 0
> 寫進 使用者有買彩券的記錄 到全站彩券檔 ( ~/etc/ticket.user )
stat("etc//ticket.data", {st_mode=S_IFREG|0600, st_size=17, ...}) = 0
openat(AT_FDCWD, "etc//ticket.data", O_RDWR) = 3
flock(3, LOCK_EX) = 0
fstat(3, {st_mode=S_IFREG|0600, st_size=17, ...}) = 0
read(3, "1 10 0 0 0 0 0 0 ", 4096) = 17
read(3, "", 4096) = 0
ftruncate(3, 0) = 0
lseek(3, 0, SEEK_SET) = 0
write(3, "1 10 100 0 0 0 0 0 ", 19) = 19
flock(3, LOCK_UN) = 0
close(3) = 0
> 應該是...改變當前下注數量?
nanosleep({tv_sec=0, tv_nsec=0}, NULL) = 0
openat(AT_FDCWD, "etc//ticket.items", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=52, ...}) = 0
read(3, "100\nPtt\nsysop\nAction\nsysop\nDUNK\n"..., 4096) = 52
close(3) = 0
> 回去下注畫面了,所以要讀取彩券(8項)的項目
stat("etc//ticket", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
openat(AT_FDCWD, "etc//ticket", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
read(3, "", 4096) = 0
close(3) = 0
> ???
openat(AT_FDCWD, "etc//ticket.data", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0600, st_size=19, ...}) = 0
read(3, "1 10 100 0 0 0 0 0 ", 4096) = 19
read(3, "", 4096) = 0
close(3) = 0
> 讀取下注量
select(1, [0], NULL, NULL, {tv_sec=0, tv_usec=10000}) = 0 (Timeout)
writev(1, [{iov_base="\33[H\33[J\33[0;1;37;46m\241iTPt\261m\250\351\241j
"..., iov_len=933}], 1) = 933
> 顯示下注畫面
===================================================
--
作者 PingNote (PN Wu (小平)) 看板 Linux
標題 [分享] Arch Linux Taiwan @ COSCUP 2018 CfP
時間 Thu Apr 26 21:17:07 2018
1F:推 Archlinux: 幫推04/26 23:36
2F:推 Debian: 推薦文章與活動。04/27 00:39
3F:推 ChakraLinux: 兄弟推04/27 00:48
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.101.37
※ 文章網址: https://webptt.com/m.aspx?n=bbs/PttBug/M.1527682178.A.ADB.html
※ 編輯: holishing (140.116.101.37), 05/30/2018 20:47:40