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/cn.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灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP