refactor(config): eliminate ErupeConfig global variable

Replace the mutable global `_config.ErupeConfig` with dependency
injection across 79 files. Config is now threaded through existing
paths: `ClientContext.RealClientMode` for packet encoding, `s.server.
erupeConfig` for channel handlers, and explicit parameters for utility
functions. This removes hidden coupling, enables test parallelism
without global save/restore, and prevents low-level packages from
reaching up to the config layer.

Key changes:
- Enrich ClientContext with RealClientMode for packet files
- Add mode parameter to CryptConn, mhfitem, mhfcourse functions
- Convert handlers_commands init() to lazy sync.Once initialization
- Delete global var, init(), and helper functions from config.go
- Update all tests to pass config explicitly
This commit is contained in:
Houmgaor
2026-02-20 17:07:42 +01:00
parent 8c7e95ce18
commit 5f3c843082
79 changed files with 509 additions and 723 deletions

View File

@@ -6,12 +6,13 @@ import (
"testing"
"erupe-ce/common/byteframe"
_config "erupe-ce/config"
"erupe-ce/network/clientctx"
)
// TestParseLargeMsgSysUpdateRightBuild tests Build for MsgSysUpdateRight (no Parse implementation).
func TestParseLargeMsgSysUpdateRightBuild(t *testing.T) {
ctx := &clientctx.ClientContext{}
ctx := &clientctx.ClientContext{RealClientMode: _config.ZZ}
original := &MsgSysUpdateRight{
ClientRespAckHandle: 0x12345678,
Bitfield: 0xDEADBEEF,
@@ -57,7 +58,7 @@ func TestParseLargeMsgMhfOperateWarehouse(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfOperateWarehouse{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -92,7 +93,7 @@ func TestParseLargeMsgMhfOperateWarehouseEquip(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfOperateWarehouse{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -132,7 +133,7 @@ func TestParseLargeMsgMhfLoadHouse(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfLoadHouse{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -171,7 +172,7 @@ func TestParseLargeMsgMhfSendMail(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfSendMail{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -232,7 +233,7 @@ func TestParseLargeMsgMhfApplyBbsArticle(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfApplyBbsArticle{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -270,7 +271,7 @@ func TestParseLargeMsgMhfChargeFesta(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfChargeFesta{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -305,7 +306,7 @@ func TestParseLargeMsgMhfChargeFestaZeroSouls(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfChargeFesta{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
if len(pkt.Souls) != 0 {
@@ -328,7 +329,7 @@ func TestParseLargeMsgMhfOperateJoint(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfOperateJoint{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -364,7 +365,7 @@ func TestParseLargeMsgMhfOperationInvGuild(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfOperationInvGuild{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -403,7 +404,7 @@ func TestParseLargeMsgMhfSaveMercenary(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfSaveMercenary{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -445,7 +446,7 @@ func TestParseLargeMsgMhfUpdateHouse(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfUpdateHouse{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -480,7 +481,7 @@ func TestParseLargeMsgSysCreateAcquireSemaphore(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgSysCreateAcquireSemaphore{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -512,7 +513,7 @@ func TestParseLargeMsgMhfOperateGuild(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfOperateGuild{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -552,7 +553,7 @@ func TestParseLargeMsgMhfReadBeatLevel(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfReadBeatLevel{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -596,7 +597,7 @@ func TestParseLargeMsgSysCreateObject(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgSysCreateObject{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -632,7 +633,7 @@ func TestParseLargeMsgSysLockGlobalSema(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgSysLockGlobalSema{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -664,7 +665,7 @@ func TestParseLargeMsgMhfCreateJoint(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfCreateJoint{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -689,7 +690,7 @@ func TestParseLargeMsgMhfGetUdTacticsRemainingPoint(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfGetUdTacticsRemainingPoint{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -718,7 +719,7 @@ func TestParseLargeMsgMhfPostCafeDurationBonusReceived(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfPostCafeDurationBonusReceived{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -744,7 +745,7 @@ func TestParseLargeMsgMhfPostCafeDurationBonusReceivedEmpty(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfPostCafeDurationBonusReceived{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
if len(pkt.CafeBonusID) != 0 {
@@ -762,7 +763,7 @@ func TestParseLargeMsgMhfRegistGuildAdventureDiva(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfRegistGuildAdventureDiva{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -787,7 +788,7 @@ func TestParseLargeMsgMhfStateFestaG(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfStateFestaG{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -812,7 +813,7 @@ func TestParseLargeMsgMhfStateFestaU(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgMhfStateFestaU{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -838,7 +839,7 @@ func TestParseLargeMsgSysEnumerateStage(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgSysEnumerateStage{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}
@@ -864,7 +865,7 @@ func TestParseLargeMsgSysReserveStage(t *testing.T) {
_, _ = bf.Seek(0, io.SeekStart)
pkt := &MsgSysReserveStage{}
if err := pkt.Parse(bf, nil); err != nil {
if err := pkt.Parse(bf, &clientctx.ClientContext{RealClientMode: _config.ZZ}); err != nil {
t.Fatalf("Parse() error = %v", err)
}