PttBug 板


LINE

※ 引述《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
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







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP