Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro-proxy
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
ygopro-proxy
Commits
91ceb9b1
Commit
91ceb9b1
authored
Oct 05, 2022
by
Chunchi Che
Committed by
GitHub
Oct 05, 2022
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #10 from DarkNeos/dev
Dev
parents
ef89c4a8
f0a266b3
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
294 additions
and
151 deletions
+294
-151
DarkNeos/transform.go
DarkNeos/transform.go
+57
-57
DarkNeos/ygopropb/ocgcore.pb.go
DarkNeos/ygopropb/ocgcore.pb.go
+165
-93
neos-protobuf
neos-protobuf
+1
-1
util/convert.go
util/convert.go
+71
-0
No files found.
DarkNeos/transform.go
View file @
91ceb9b1
...
...
@@ -7,15 +7,12 @@ import (
"errors"
"fmt"
"log"
"unicode/utf16"
"github.com/sktt1ryze/ygopro-proxy/DarkNeos/ygopropb"
util
"github.com/sktt1ryze/ygopro-proxy/util"
"google.golang.org/protobuf/proto"
)
const
FILLING_TOKEN
uint16
=
0xcccc
const
UTF16_BUFFER_MAX_LEN
int
=
20
const
PACKET_MIN_LEN
int
=
3
const
COMPONENT
=
"[transform]"
const
(
...
...
@@ -24,10 +21,13 @@ const (
)
const
(
CtosUpdateDeck
=
2
CtosProtoPlayerInfo
=
16
CtosProtoJoinGame
=
18
CtosHsReady
=
34
StocJoinGame
=
18
StocTypeChange
=
19
StocChat
=
25
StocHsPlayerEnter
=
32
)
...
...
@@ -108,6 +108,10 @@ func Transform(src []byte, tranformType int, ctx *util.Context) ([]byte, error)
packet
=
(
*
pCtosPlayerInfo
)(
message
.
GetCtosPlayerInfo
())
.
Pb2Packet
()
case
*
(
ygopropb
.
YgoCtosMsg_CtosJoinGame
)
:
packet
=
(
*
pCtosJoinGame
)(
message
.
GetCtosJoinGame
())
.
Pb2Packet
()
case
*
(
ygopropb
.
YgoCtosMsg_CtosUpdateDeck
)
:
packet
=
(
*
pCtosUpdateDeck
)(
message
.
GetCtosUpdateDeck
())
.
Pb2Packet
()
case
*
(
ygopropb
.
YgoCtosMsg_CtosHsReady
)
:
packet
=
(
*
pCtosHsReady
)(
message
.
GetCtosHsReady
())
.
Pb2Packet
()
default
:
return
nil
,
errors
.
New
(
COMPONENT
+
"Unhandled YgoCtosMsg type"
)
}
...
...
@@ -128,6 +132,8 @@ func Transform(src []byte, tranformType int, ctx *util.Context) ([]byte, error)
pb
=
pStocJoinGame
{}
.
Packet2Pb
(
packet
)
case
StocHsPlayerEnter
:
pb
=
pStocHsPlayerEnter
{}
.
Packet2Pb
(
packet
)
case
StocTypeChange
:
pb
=
pStocTypeChage
{}
.
Packet2Pb
(
packet
)
default
:
return
nil
,
errors
.
New
(
fmt
.
Sprintf
(
COMPONENT
+
"Unhandled YgoStocMsg type, proto=%d"
,
packet
.
Proto
))
}
...
...
@@ -148,8 +154,8 @@ type pCtosPlayerInfo ygopropb.CtosPlayerInfo
// @Name: [20]uint16
func
(
pb
*
pCtosPlayerInfo
)
Pb2Packet
()
YgoPacket
{
buf
:=
s
trToUtf16Buffer
(
pb
.
Name
)
exdata
:=
uint16BufToByteBuf
(
buf
)
buf
:=
util
.
S
trToUtf16Buffer
(
pb
.
Name
)
exdata
:=
u
til
.
U
int16BufToByteBuf
(
buf
)
return
YgoPacket
{
PacketLen
:
uint16
(
len
(
exdata
))
+
1
,
...
...
@@ -171,7 +177,7 @@ func (pb *pCtosJoinGame) Pb2Packet() YgoPacket {
exdata
=
append
(
exdata
,
byte
(
pb
.
Gameid
),
byte
(
pb
.
Gameid
>>
8
),
byte
(
pb
.
Gameid
>>
16
),
byte
(
pb
.
Gameid
>>
24
))
for
_
,
v
:=
range
u
int16BufToByteBuf
(
s
trToUtf16Buffer
(
pb
.
Passwd
))
{
for
_
,
v
:=
range
u
til
.
Uint16BufToByteBuf
(
util
.
S
trToUtf16Buffer
(
pb
.
Passwd
))
{
exdata
=
append
(
exdata
,
v
)
}
...
...
@@ -182,6 +188,40 @@ func (pb *pCtosJoinGame) Pb2Packet() YgoPacket {
}
}
type
pCtosUpdateDeck
ygopropb
.
CtosUpdateDeck
// @main: []int32
// @extra: []int32
// @size: []int32
func
(
pb
*
pCtosUpdateDeck
)
Pb2Packet
()
YgoPacket
{
v
:=
make
([]
int32
,
0
)
v
=
append
(
v
,
int32
(
len
(
pb
.
Main
)
+
len
(
pb
.
Extra
)))
v
=
append
(
v
,
int32
(
len
(
pb
.
Side
)))
v
=
append
(
v
,
pb
.
Main
...
)
v
=
append
(
v
,
pb
.
Extra
...
)
v
=
append
(
v
,
pb
.
Side
...
)
exdata
:=
util
.
Int32ArrayToByteArray
(
v
)
return
YgoPacket
{
PacketLen
:
uint16
(
len
(
exdata
))
+
1
,
Proto
:
CtosUpdateDeck
,
Exdata
:
exdata
,
}
}
type
pCtosHsReady
ygopropb
.
CtosHsReady
// empty message
func
(
_
*
pCtosHsReady
)
Pb2Packet
()
YgoPacket
{
return
YgoPacket
{
PacketLen
:
1
,
Proto
:
CtosHsReady
,
Exdata
:
make
([]
byte
,
0
),
}
}
// +++++ Server To Client +++++
type
server2Client
interface
{
...
...
@@ -194,7 +234,7 @@ type pStocChat struct{}
// @message: []uint16
func
(
_
pStocChat
)
Packet2Pb
(
pkt
YgoPacket
)
ygopropb
.
YgoStocMsg
{
player
:=
int32
(
binary
.
LittleEndian
.
Uint16
(
pkt
.
Exdata
))
message
:=
utf16BufferToStr
(
pkt
.
Exdata
[
2
:
])
message
:=
ut
il
.
Ut
f16BufferToStr
(
pkt
.
Exdata
[
2
:
])
msg
:=
ygopropb
.
YgoStocMsg_StocChat
{
StocChat
:
&
ygopropb
.
StocChat
{
...
...
@@ -251,8 +291,8 @@ func (_ pStocJoinGame) Packet2Pb(pkt YgoPacket) ygopropb.YgoStocMsg {
type
pStocHsPlayerEnter
struct
{}
func
(
_
pStocHsPlayerEnter
)
Packet2Pb
(
pkt
YgoPacket
)
ygopropb
.
YgoStocMsg
{
name_max
:=
UTF16_BUFFER_MAX_LEN
*
2
name
:=
utf16BufferToStr
(
pkt
.
Exdata
[
:
name_max
])
name_max
:=
util
.
UTF16_BUFFER_MAX_LEN
*
2
name
:=
ut
il
.
Ut
f16BufferToStr
(
pkt
.
Exdata
[
:
name_max
])
pos
:=
pkt
.
Exdata
[
name_max
]
msg
:=
ygopropb
.
YgoStocMsg_StocHsPlayerEnter
{
...
...
@@ -267,56 +307,16 @@ func (_ pStocHsPlayerEnter) Packet2Pb(pkt YgoPacket) ygopropb.YgoStocMsg {
}
}
// +++++ Util Functions +++++
func
strToUtf16Buffer
(
s
string
)
[]
uint16
{
b
:=
make
([]
uint16
,
UTF16_BUFFER_MAX_LEN
,
UTF16_BUFFER_MAX_LEN
)
for
i
:=
range
b
{
b
[
i
]
=
FILLING_TOKEN
}
s_utf16
:=
utf16
.
Encode
([]
rune
(
s
))
type
pStocTypeChage
struct
{}
// todo: optimize
for
i
,
v
:=
range
s_utf16
{
if
i
<
UTF16_BUFFER_MAX_LEN
{
b
[
i
]
=
v
if
i
==
len
(
s_utf16
)
-
1
&&
i
<
len
(
b
)
-
1
{
b
[
i
+
1
]
=
0
}
}
else
{
break
}
}
return
b
}
func
utf16BufferToStr
(
p
[]
byte
)
string
{
v
:=
chunkBytesToUint16s
(
p
)
return
string
(
utf16
.
Decode
(
v
))
}
func
uint16BufToByteBuf
(
u16_b
[]
uint16
)
[]
byte
{
b
:=
make
([]
byte
,
0
,
len
(
u16_b
)
*
2
)
for
_
,
v
:=
range
u16_b
{
// little endian
b
=
append
(
b
,
byte
(
v
),
byte
(
v
>>
8
))
func
(
_
pStocTypeChage
)
Packet2Pb
(
pkt
YgoPacket
)
ygopropb
.
YgoStocMsg
{
msg
:=
ygopropb
.
YgoStocMsg_StocTypeChange
{
StocTypeChange
:
&
ygopropb
.
StocTypeChange
{
Type
:
int32
(
pkt
.
Exdata
[
0
]),
},
}
return
b
}
func
chunkBytesToUint16s
(
items
[]
byte
)
[]
uint16
{
const
chunkSize
=
2
var
chunks
[]
uint16
for
chunkSize
<
len
(
items
)
{
items
,
chunks
=
items
[
chunkSize
:
],
append
(
chunks
,
binary
.
LittleEndian
.
Uint16
(
items
))
return
ygopropb
.
YgoStocMsg
{
Msg
:
&
msg
,
}
return
chunks
}
DarkNeos/ygopropb/ocgcore.pb.go
View file @
91ceb9b1
This diff is collapsed.
Click to expand it.
neos-protobuf
@
1ca09b1d
Subproject commit
a54ddaec084aaf70a779f5a876d2e8554905625c
Subproject commit
1ca09b1d90b55e2c155f83781c8b2a5d2ee30a04
util/convert.go
0 → 100644
View file @
91ceb9b1
package
util
import
(
"encoding/binary"
"unicode/utf16"
)
const
UTF16_BUFFER_MAX_LEN
int
=
20
const
FILLING_TOKEN
uint16
=
0xcccc
func
StrToUtf16Buffer
(
s
string
)
[]
uint16
{
b
:=
make
([]
uint16
,
UTF16_BUFFER_MAX_LEN
,
UTF16_BUFFER_MAX_LEN
)
for
i
:=
range
b
{
b
[
i
]
=
FILLING_TOKEN
}
s_utf16
:=
utf16
.
Encode
([]
rune
(
s
))
// todo: optimize
for
i
,
v
:=
range
s_utf16
{
if
i
<
UTF16_BUFFER_MAX_LEN
{
b
[
i
]
=
v
if
i
==
len
(
s_utf16
)
-
1
&&
i
<
len
(
b
)
-
1
{
b
[
i
+
1
]
=
0
}
}
else
{
break
}
}
return
b
}
func
Utf16BufferToStr
(
p
[]
byte
)
string
{
v
:=
chunkBytesToUint16s
(
p
)
return
string
(
utf16
.
Decode
(
v
))
}
func
Uint16BufToByteBuf
(
u16_b
[]
uint16
)
[]
byte
{
b
:=
make
([]
byte
,
0
,
len
(
u16_b
)
*
2
)
for
_
,
v
:=
range
u16_b
{
// little endian
b
=
append
(
b
,
byte
(
v
),
byte
(
v
>>
8
))
}
return
b
}
func
Int32ArrayToByteArray
(
v
[]
int32
)
[]
byte
{
b
:=
make
([]
byte
,
0
,
len
(
v
)
*
4
)
for
_
,
i
:=
range
v
{
b
=
append
(
b
,
byte
(
i
),
byte
(
i
>>
8
),
byte
(
i
>>
16
),
byte
(
i
>>
24
))
}
return
b
}
func
chunkBytesToUint16s
(
items
[]
byte
)
[]
uint16
{
const
chunkSize
=
2
var
chunks
[]
uint16
for
chunkSize
<
len
(
items
)
{
items
,
chunks
=
items
[
chunkSize
:
],
append
(
chunks
,
binary
.
LittleEndian
.
Uint16
(
items
))
}
return
chunks
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment