我使用erlang的Message传递构造构建了一个多玩家游戏(确切地说,4个玩家).我在以下链接上跟随tictactoe游戏作为示例,但真正相似的是Message传递构造,如游戏中所示:link
然后我选择在ejabberd多用户聊天室上运行这个游戏,我确实为此写了一个ejabberd钩子.但是如果你在上面的链接上查看文件tictactoe.erl中的NewGameState,你会发现没有办法在变量中检索它.
所以我使用了mnesia并将每个新生成的游戏状态写入此mnesia表.现在在我的ejabberd钩子里面我调用我的游戏功能(即每次调用一系列模块 - >"gen_server,game_modules,mnesia_modules"执行)并且在游戏函数调用下面的钩子里面我正在从mnesia表中读取gamestate如下(这里函数myMessage是ejabberd钩子里面的函数):
myMessage({#message = Msg, C2SState})->
some_other_module:game_func(Args),
State=mnesia_module:read(key),
{Msg, C2SState};
myMessage(Acc) ->
Acc.
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,执行顺序时,read操作给我一个空表
some_other_module:game_func(Args),
GameState=mnesia_module:read(key),
Run Code Online (Sandbox Code Playgroud)
当我在这两行之间插入延迟时timer:sleep/1,如下所示(在使用不同值进行一些试验后,随机选择值200):
some_other_module:game_func(Args),
timer:sleep(200)
GameState=mnesia_module:read(key),
Run Code Online (Sandbox Code Playgroud)
我得到GameState的正确值,因此建议我在线阅读操作
GameState=mnesia_module:read(key),
Run Code Online (Sandbox Code Playgroud)
在行之前执行/执行some_other_module:game_func(Args)(这是一系列模块 - >"gen_server,game_modules,mnesia_modules")能够执行mnesia模块并将GameState写入mnesia表.
我怎么能解决这个问题,因为我不想使用,timer:sleep/1因为它不是可靠的解决方案.
任何人都可以建议我在这里工作.我的意思是任何人都可以建议我通过除mnesia以外的任何其他方式检索钩子内的GameState,所以我根本没有竞争条件.
或者是否有某种方式ejabberd提供了一些我可以在这里使用的功能?
提前致谢.
我有一个字符串值作为aman,<<97,0,109,0,97,0,110,0>>当我这样做时打印:
A=<<97,0,109,0,97,0,110,0>>
erlang:binary_to_list(A)
Run Code Online (Sandbox Code Playgroud)
我得到[97,0,109,0,97,0,110,0]
但我需要一个字符串作为"阿曼"或简单的阿曼
如何才能做到这一点?
我正在尝试从Go Web服务器设置cookie,然后在chrome浏览器中读取它。
这是我的代码
package main
import (
"fmt"
"net/http"
"time"
)
func setCookies(w http.ResponseWriter, r *http.Request){
expiration := time.Now().Add(365 * 24 * time.Hour)
c1 := http.Cookie{Name: "SpiderMan: Far from home",Value : "HollyWood", Path: "/", Expires: expiration, Secure: false}
http.SetCookie(w,&c1)
c2 := http.Cookie{Name: "Kabir Singh",Value: "BollyWood", Path: "/", Expires: expiration, Secure: false}
http.SetCookie(w,&c2)
// w.Header().Set("Set-Cookie",c1.String())
// w.Header().Add("Set-Cookie",c2.String())
// HttpOnly: true
fmt.Fprintf(w, "")
}
func getCookies(w http.ResponseWriter, r *http.Request){
// h := r.Header["Kabir Singh"]
// fmt.Fprintln(w,h)
c1, err := r.Cookie("Kabir Singh")
if …Run Code Online (Sandbox Code Playgroud)