Lua -> Go: Player
parent
7103bebcb6
commit
23b24482ae
4
init.go
4
init.go
|
@ -52,7 +52,7 @@ func Init(p, p2 *Peer, ignMedia bool, fin chan struct{}) {
|
|||
connectedPeers--
|
||||
connectedPeersMu.Unlock()
|
||||
|
||||
processLeave(p2.ID())
|
||||
processLeave(p2)
|
||||
}
|
||||
|
||||
return
|
||||
|
@ -215,7 +215,7 @@ func Init(p, p2 *Peer, ignMedia bool, fin chan struct{}) {
|
|||
connectedPeers--
|
||||
connectedPeersMu.Unlock()
|
||||
|
||||
processLeave(p2.ID())
|
||||
processLeave(p2)
|
||||
}
|
||||
|
||||
return
|
||||
|
|
156
l_player.go
156
l_player.go
|
@ -1,156 +0,0 @@
|
|||
package multiserver
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"github.com/yuin/gopher-lua"
|
||||
"log"
|
||||
)
|
||||
|
||||
var joinHandlers []*lua.LFunction
|
||||
var leaveHandlers []*lua.LFunction
|
||||
|
||||
func registerOnJoinPlayer(L *lua.LState) int {
|
||||
f := L.ToFunction(1)
|
||||
joinHandlers = append(joinHandlers, f)
|
||||
return 0
|
||||
}
|
||||
|
||||
func registerOnLeavePlayer(L *lua.LState) int {
|
||||
f := L.ToFunction(1)
|
||||
leaveHandlers = append(leaveHandlers, f)
|
||||
return 0
|
||||
}
|
||||
|
||||
func processJoin(peerid PeerID) {
|
||||
for i := range joinHandlers {
|
||||
if err := l.CallByParam(lua.P{Fn: joinHandlers[i], NRet: 0, Protect: true}, lua.LNumber(peerid)); err != nil {
|
||||
log.Print(err)
|
||||
End(true, true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func processLeave(peerid PeerID) {
|
||||
for i := range leaveHandlers {
|
||||
if err := l.CallByParam(lua.P{Fn: leaveHandlers[i], NRet: 0, Protect: true}, lua.LNumber(peerid)); err != nil {
|
||||
log.Print(err)
|
||||
End(true, true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func getPlayerName(L *lua.LState) int {
|
||||
id := L.ToInt(1)
|
||||
l := GetListener()
|
||||
p := l.GetPeerByID(PeerID(id))
|
||||
|
||||
if p != nil {
|
||||
L.Push(lua.LString(p.username))
|
||||
} else {
|
||||
L.Push(lua.LNil)
|
||||
}
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
func luaGetPeerID(L *lua.LState) int {
|
||||
name := L.ToString(1)
|
||||
l := GetListener()
|
||||
|
||||
found := false
|
||||
i := PeerIDCltMin
|
||||
for l.id2peer[i].Peer != nil {
|
||||
if string(l.id2peer[i].username) == name {
|
||||
found = true
|
||||
L.Push(lua.LNumber(i))
|
||||
break
|
||||
}
|
||||
|
||||
i++
|
||||
}
|
||||
|
||||
if !found {
|
||||
L.Push(lua.LNil)
|
||||
}
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
func kickPlayer(L *lua.LState) int {
|
||||
id := L.ToInt(1)
|
||||
reason := L.ToString(2)
|
||||
l := GetListener()
|
||||
p := l.GetPeerByID(PeerID(id))
|
||||
|
||||
if reason == "" {
|
||||
reason = "Kicked."
|
||||
} else {
|
||||
reason = "Kicked. " + reason
|
||||
}
|
||||
|
||||
msg := []byte(reason)
|
||||
|
||||
data := make([]byte, 6+len(msg))
|
||||
data[0] = uint8(0x00)
|
||||
data[1] = uint8(0x0A)
|
||||
data[2] = uint8(0x0A)
|
||||
binary.BigEndian.PutUint16(data[3:5], uint16(len(msg)))
|
||||
copy(data[5:5+len(msg)], msg)
|
||||
data[5+len(msg)] = uint8(0x00)
|
||||
|
||||
ack, err := p.Send(Pkt{Data: data})
|
||||
if err != nil {
|
||||
log.Print(err)
|
||||
}
|
||||
<-ack
|
||||
|
||||
p.SendDisco(0, true)
|
||||
p.Close()
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
func getCurrentServer(L *lua.LState) int {
|
||||
id := L.ToInt(1)
|
||||
l := GetListener()
|
||||
p := l.GetPeerByID(PeerID(id))
|
||||
|
||||
servers := GetConfKey("servers").(map[interface{}]interface{})
|
||||
for server := range servers {
|
||||
if GetConfKey("servers:"+server.(string)+":address") == p.Server().Addr().String() {
|
||||
L.Push(lua.LString(server.(string)))
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
func getPlayerAddress(L *lua.LState) int {
|
||||
id := L.ToInt(1)
|
||||
l := GetListener()
|
||||
p := l.GetPeerByID(PeerID(id))
|
||||
|
||||
if p != nil {
|
||||
L.Push(lua.LString(p.Addr().String()))
|
||||
} else {
|
||||
L.Push(lua.LNil)
|
||||
}
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
func getConnectedPlayers(L *lua.LState) int {
|
||||
l := GetListener()
|
||||
|
||||
r := L.NewTable()
|
||||
i := PeerIDCltMin
|
||||
for l.id2peer[i].Peer != nil {
|
||||
r.Append(lua.LNumber(i))
|
||||
i++
|
||||
}
|
||||
|
||||
L.Push(r)
|
||||
|
||||
return 1
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
package multiserver
|
||||
|
||||
import (
|
||||
|
||||
)
|
||||
|
||||
var onJoinPlayer []func(*Peer)
|
||||
var onLeavePlayer []func(*Peer)
|
||||
|
||||
func RegisterOnJoinPlayer(function func(*Peer)) {
|
||||
onJoinPlayer = append(onJoinPlayer, function)
|
||||
}
|
||||
|
||||
func RegisterOnLeavePlayer(function func(*Peer)) {
|
||||
onLeavePlayer = append(onLeavePlayer, function)
|
||||
}
|
||||
|
||||
func processJoin(p *Peer) {
|
||||
for i := range onJoinPlayer {
|
||||
onJoinPlayer[i]()
|
||||
}
|
||||
}
|
||||
|
||||
func processLeave(p *Peer) {
|
||||
for i := range onLeavePlayer {
|
||||
onLeavePlayer[i]()
|
||||
}
|
||||
}
|
4
proxy.go
4
proxy.go
|
@ -23,7 +23,7 @@ func Proxy(src, dst *Peer) {
|
|||
connectedPeers--
|
||||
connectedPeersMu.Unlock()
|
||||
|
||||
processLeave(src.ID())
|
||||
processLeave(src)
|
||||
}
|
||||
|
||||
break
|
||||
|
@ -43,7 +43,7 @@ func Proxy(src, dst *Peer) {
|
|||
}
|
||||
// Client ready
|
||||
if pkt.Data[0] == uint8(0x00) && pkt.Data[1] == uint8(0x43) && !src.IsSrv() {
|
||||
go processJoin(src.ID())
|
||||
go processJoin(src)
|
||||
}
|
||||
|
||||
// Forward
|
||||
|
|
Loading…
Reference in New Issue