Skip to content

Commit

Permalink
增加protobuf、aoi计算、聊天通讯逻辑
Browse files Browse the repository at this point in the history
  • Loading branch information
liuligames committed Aug 11, 2021
1 parent 58cf063 commit cd7985e
Show file tree
Hide file tree
Showing 18 changed files with 1,241 additions and 1 deletion.
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ go 1.16

require (
github.com/gin-gonic/gin v1.7.2
github.com/golang/protobuf v1.5.0
github.com/panjf2000/gnet v1.5.3
go.uber.org/atomic v1.9.0 // indirect
google.golang.org/protobuf v1.27.1
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
)
10 changes: 9 additions & 1 deletion go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,11 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.5.0 h1:LUVKkCeviFUMKqHa4tXIIij/lbhnMbP7Fn5wKdKkRh4=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
Expand Down Expand Up @@ -86,6 +89,11 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3
golang.org/x/tools v0.0.0-20191108193012-7d206e10da11 h1:Yq9t9jnGoR+dBuitxdo9l6Q7xh/zOyNnYUtDKaQ3x0E=
golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
Expand Down
139 changes: 139 additions & 0 deletions mmo/Client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
package main

import (
"fmt"
"github.com/golang/protobuf/proto"
"io"
"net"
"time"
pMsg "wukong/mmo/pb/msg"
wkNet "wukong/net"
)

func main() {

fmt.Println("--------------> 陆离频道 <--------------")
time.Sleep(1 + time.Second)

conn, err := net.Dial("tcp", "127.0.0.1:9527")
if err != nil {
fmt.Println("client start err exit! ")
return
}

for i := 0; i < 2; i++ {
dp := wkNet.NewDataPack()
//binaryMsg, err := dp.Pack(wkNet.NewMessage(0, []byte("LiuLiGamesV0.9 client0 Test Message ")))
//if err != nil {
// fmt.Println("Pack error", err)
//}
//
//if _, err := conn.Write(binaryMsg); err != nil {
// fmt.Println("conn Write error", err)
// return
//}

binaryHead := make([]byte, dp.GetHeadLen())
if _, err := io.ReadFull(conn, binaryHead); err != nil {
fmt.Println("read head error", err)
return
}

msgHead, err := dp.Unpack(binaryHead)
if err != nil {
fmt.Println("client unpack msgHead error", err)
break
}

if msgHead.GetMsgLen() > 0 {
msg := msgHead.(*wkNet.Message)
msg.SetData(make([]byte, msg.GetMsgLen()))

if _, err := io.ReadFull(conn, msg.Data); err != nil {
fmt.Println("read msg data error", err)
return
}

data := &pMsg.SyncPid{}
err := proto.Unmarshal(msg.Data, data)
if err != nil {
fmt.Println("Unmarshal msg data error", err)
return
}

fmt.Println("-----> Recv Server msgId= ",
msg.Id, " len= ", msg.MsgLen, " data = ", data)
}

time.Sleep(1 * time.Second)
}
fmt.Println("-----> stop for")

for {

time.Sleep(5 * time.Second)

fmt.Println("-----> start talk")

talk(conn,"我是你爸爸~")
}


}

func talk(conn net.Conn,content string) {

data := &pMsg.Talk{
Content: content,
Name: "陆离",
}

marshalMsg, err := proto.Marshal(data)
if err != nil {
fmt.Println("Marshal msg err :", err)
return
}

dp := wkNet.NewDataPack()
binaryMsg, err := dp.Pack(wkNet.NewMessage(2, marshalMsg))
if err != nil {
fmt.Println("Pack error", err)
}

if _, err := conn.Write(binaryMsg); err != nil {
fmt.Println("conn Write error", err)
return
}

binaryHead := make([]byte, dp.GetHeadLen())
if _, err := io.ReadFull(conn, binaryHead); err != nil {
fmt.Println("read head error", err)
return
}

msgHead, err := dp.Unpack(binaryHead)
if err != nil {
fmt.Println("client unpack msgHead error", err)
return
}

if msgHead.GetMsgLen() > 0 {
msg := msgHead.(*wkNet.Message)
msg.SetData(make([]byte, msg.GetMsgLen()))

if _, err := io.ReadFull(conn, msg.Data); err != nil {
fmt.Println("read msg data error", err)
return
}

data := &pMsg.BroadCast{}
err := proto.Unmarshal(msg.Data, data)
if err != nil {
fmt.Println("Unmarshal msg data error", err)
return
}

fmt.Println("-----> Recv Server msgId= ",
msg.Id, " len= ", msg.MsgLen, " data = ", data)
}
}
137 changes: 137 additions & 0 deletions mmo/Client1.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
package main

import (
"fmt"
"github.com/golang/protobuf/proto"
"io"
"net"
"time"
pMsg "wukong/mmo/pb/msg"
wkNet "wukong/net"
)

func main() {

fmt.Println("--------------> 陆真人频道 <--------------")
time.Sleep(1 + time.Second)

conn, err := net.Dial("tcp", "127.0.0.1:9527")
if err != nil {
fmt.Println("client start err exit! ")
return
}

for i := 0; i < 2; i++ {
dp := wkNet.NewDataPack()
//binaryMsg, err := dp.Pack(wkNet.NewMessage(0, []byte("LiuLiGamesV0.9 client0 Test Message ")))
//if err != nil {
// fmt.Println("Pack error", err)
//}
//
//if _, err := conn.Write(binaryMsg); err != nil {
// fmt.Println("conn Write error", err)
// return
//}

binaryHead := make([]byte, dp.GetHeadLen())
if _, err := io.ReadFull(conn, binaryHead); err != nil {
fmt.Println("read head error", err)
return
}

msgHead, err := dp.Unpack(binaryHead)
if err != nil {
fmt.Println("client unpack msgHead error", err)
break
}

if msgHead.GetMsgLen() > 0 {
msg := msgHead.(*wkNet.Message)
msg.SetData(make([]byte, msg.GetMsgLen()))

if _, err := io.ReadFull(conn, msg.Data); err != nil {
fmt.Println("read msg data error", err)
return
}

data := &pMsg.SyncPid{}
err := proto.Unmarshal(msg.Data, data)
if err != nil {
fmt.Println("Unmarshal msg data error", err)
return
}

fmt.Println("-----> Recv Server msgId= ",
msg.Id, " len= ", msg.MsgLen, " data = ", data)
}

time.Sleep(1 * time.Second)
}

fmt.Println("-----> stop for")
for {

time.Sleep(6 * time.Second)

fmt.Println("-----> start talk")

talk1(conn, "我嫩爹!!!")
}
}

func talk1(conn net.Conn, content string) {

data := &pMsg.Talk{
Content: content,
Name: "陆真人",
}

marshalMsg, err := proto.Marshal(data)
if err != nil {
fmt.Println("Marshal msg err :", err)
return
}

dp := wkNet.NewDataPack()
binaryMsg, err := dp.Pack(wkNet.NewMessage(2, marshalMsg))
if err != nil {
fmt.Println("Pack error", err)
}

if _, err := conn.Write(binaryMsg); err != nil {
fmt.Println("conn Write error", err)
return
}

binaryHead := make([]byte, dp.GetHeadLen())
if _, err := io.ReadFull(conn, binaryHead); err != nil {
fmt.Println("read head error", err)
return
}

msgHead, err := dp.Unpack(binaryHead)
if err != nil {
fmt.Println("client unpack msgHead error", err)
return
}

if msgHead.GetMsgLen() > 0 {
msg := msgHead.(*wkNet.Message)
msg.SetData(make([]byte, msg.GetMsgLen()))

if _, err := io.ReadFull(conn, msg.Data); err != nil {
fmt.Println("read msg data error", err)
return
}

data := &pMsg.BroadCast{}
err := proto.Unmarshal(msg.Data, data)
if err != nil {
fmt.Println("Unmarshal msg data error", err)
return
}

fmt.Println("-----> Recv Server msgId= ",
msg.Id, " len= ", msg.MsgLen, " data = ", data)
}
}
33 changes: 33 additions & 0 deletions mmo/api/WorldChat.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package api

import (
"fmt"
"github.com/golang/protobuf/proto"
"wukong/iface"
"wukong/mmo/core"
"wukong/mmo/pb/msg"
"wukong/net"
)

type WorldChatApi struct {
net.BaseRouter
}

func (wc WorldChatApi) Handle(request iface.IRequest) {
protoMag := &msg.Talk{}
err := proto.Unmarshal(request.GetData(), protoMag)
if err != nil {
fmt.Println("talk Unmarshal error : ", err)
return
}

pId, err := request.GetConnection().GetProperty("PId")
if err != nil {
fmt.Println("get Property PId error : ", err)
return
}

player := core.WorldManagerObj.GetPlayerByPId(pId.(int32))

player.Talk(fmt.Sprintf("玩家 [%s] : %s", protoMag.Name, protoMag.Content))
}
5 changes: 5 additions & 0 deletions mmo/conf/conf.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
name: "MMO Games"
Host: "0.0.0.0"
TcpPort: 9527
MaxConn: 3000
WorkerPoolSize: 10
Loading

0 comments on commit cd7985e

Please sign in to comment.