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

@@ -119,11 +119,11 @@ func TestSerializeWarehouseItems_Empty(t *testing.T) {
func TestDiffItemStacks(t *testing.T) {
tests := []struct {
name string
old []MHFItemStack
update []MHFItemStack
wantLen int
checkFn func(t *testing.T, result []MHFItemStack)
name string
old []MHFItemStack
update []MHFItemStack
wantLen int
checkFn func(t *testing.T, result []MHFItemStack)
}{
{
name: "update existing quantity",
@@ -210,12 +210,7 @@ func TestDiffItemStacks(t *testing.T) {
}
func TestReadWarehouseEquipment(t *testing.T) {
// Save original config
originalMode := _config.ErupeConfig.RealClientMode
defer func() {
_config.ErupeConfig.RealClientMode = originalMode
}()
_config.ErupeConfig.RealClientMode = _config.Z1
mode := _config.Z1
bf := byteframe.NewByteFrame()
bf.WriteUint32(12345) // WarehouseID
@@ -248,7 +243,7 @@ func TestReadWarehouseEquipment(t *testing.T) {
bf.WriteUint16(9999)
_, _ = bf.Seek(0, 0)
equipment := ReadWarehouseEquipment(bf)
equipment := ReadWarehouseEquipment(bf, mode)
if equipment.WarehouseID != 12345 {
t.Errorf("WarehouseID = %d, want 12345", equipment.WarehouseID)
@@ -274,12 +269,7 @@ func TestReadWarehouseEquipment(t *testing.T) {
}
func TestReadWarehouseEquipment_ZeroWarehouseID(t *testing.T) {
// Save original config
originalMode := _config.ErupeConfig.RealClientMode
defer func() {
_config.ErupeConfig.RealClientMode = originalMode
}()
_config.ErupeConfig.RealClientMode = _config.Z1
mode := _config.Z1
bf := byteframe.NewByteFrame()
bf.WriteUint32(0) // WarehouseID = 0
@@ -304,7 +294,7 @@ func TestReadWarehouseEquipment_ZeroWarehouseID(t *testing.T) {
bf.WriteUint16(0)
_, _ = bf.Seek(0, 0)
equipment := ReadWarehouseEquipment(bf)
equipment := ReadWarehouseEquipment(bf, mode)
if equipment.WarehouseID == 0 {
t.Error("WarehouseID should be replaced with random value when input is 0")
@@ -312,12 +302,7 @@ func TestReadWarehouseEquipment_ZeroWarehouseID(t *testing.T) {
}
func TestMHFEquipment_ToBytes(t *testing.T) {
// Save original config
originalMode := _config.ErupeConfig.RealClientMode
defer func() {
_config.ErupeConfig.RealClientMode = originalMode
}()
_config.ErupeConfig.RealClientMode = _config.Z1
mode := _config.Z1
equipment := MHFEquipment{
WarehouseID: 12345,
@@ -333,9 +318,9 @@ func TestMHFEquipment_ToBytes(t *testing.T) {
equipment.Sigils[i].Effects = make([]MHFSigilEffect, 3)
}
data := equipment.ToBytes()
data := equipment.ToBytes(mode)
bf := byteframe.NewByteFrameFromBytes(data)
readEquipment := ReadWarehouseEquipment(bf)
readEquipment := ReadWarehouseEquipment(bf, mode)
if readEquipment.WarehouseID != equipment.WarehouseID {
t.Errorf("WarehouseID = %d, want %d", readEquipment.WarehouseID, equipment.WarehouseID)
@@ -352,12 +337,7 @@ func TestMHFEquipment_ToBytes(t *testing.T) {
}
func TestSerializeWarehouseEquipment(t *testing.T) {
// Save original config
originalMode := _config.ErupeConfig.RealClientMode
defer func() {
_config.ErupeConfig.RealClientMode = originalMode
}()
_config.ErupeConfig.RealClientMode = _config.Z1
mode := _config.Z1
equipment := []MHFEquipment{
{
@@ -383,7 +363,7 @@ func TestSerializeWarehouseEquipment(t *testing.T) {
}
}
data := SerializeWarehouseEquipment(equipment)
data := SerializeWarehouseEquipment(equipment, mode)
bf := byteframe.NewByteFrameFromBytes(data)
count := bf.ReadUint16()
@@ -393,12 +373,7 @@ func TestSerializeWarehouseEquipment(t *testing.T) {
}
func TestMHFEquipment_RoundTrip(t *testing.T) {
// Test that we can write and read back the same equipment
originalMode := _config.ErupeConfig.RealClientMode
defer func() {
_config.ErupeConfig.RealClientMode = originalMode
}()
_config.ErupeConfig.RealClientMode = _config.Z1
mode := _config.Z1
original := MHFEquipment{
WarehouseID: 99999,
@@ -419,11 +394,11 @@ func TestMHFEquipment_RoundTrip(t *testing.T) {
}
// Write to bytes
data := original.ToBytes()
data := original.ToBytes(mode)
// Read back
bf := byteframe.NewByteFrameFromBytes(data)
recovered := ReadWarehouseEquipment(bf)
recovered := ReadWarehouseEquipment(bf, mode)
// Compare
if recovered.WarehouseID != original.WarehouseID {