Re: [問題] 賭盤下注扣錢後沒有成功下注

看板PttBug作者 ( )時間7年前 (2018/05/30 20:09), 7年前編輯推噓0(000)
留言0則, 0人參與, 7年前最新討論串2/2 (看更多)
※ 引述《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)方面 可能也要把 . )))((( . . . ▄ .-⊙⊙-. . . << : // . . ┘└ 買了彩券囉~~~~~~ 這個訊息改成比較合理的提示 像是 . )))((( . . . ▄ .-⊙⊙-. . . << : // . . ┘└ 購買彩券中...... . )))((( . . . ▄ .-⊙⊙-. . . << : // . . ┘└ 下注中..._ 之類的 (反正底下還有「請按任意鍵繼續」的提示) 可能更好 雖然一般情況下使用者不會感受/在意到這樣的差異... * 附錄:(以購買「全站彩券」為例) =================================================== 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

04/26 23:36,
幫推
04/26 23:36

04/27 00:39,
推薦文章與活動。
04/27 00:39

04/27 00:48,
兄弟推
04/27 00:48
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.101.37 ※ 文章網址: https://www.ptt.cc/bbs/PttBug/M.1527682178.A.ADB.html ※ 編輯: holishing (140.116.101.37), 05/30/2018 20:47:40
文章代碼(AID): #1R3fI2hR (PttBug)
文章代碼(AID): #1R3fI2hR (PttBug)