作者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/cn.aspx?n=bbs/PttBug/M.1527682178.A.ADB.html
※ 编辑: holishing (140.116.101.37), 05/30/2018 20:47:40