Overview
A codebase audit identified 70 channel server handlers that are empty stubs — they are registered in handlers_table.go but do nothing when called. This issue tracks them as a single reference point.
All stubs are now annotated with // stub: unimplemented inline, so the full live list is always one grep away:
grep -rn "// stub: unimplemented" server/channelserver/handlers_*.go
A human-readable breakdown with per-handler descriptions lives in docs/unimplemented.md.
Subsystems with unimplemented handlers
| Subsystem |
Count |
Handlers |
| Session |
18 |
MsgHead, MsgSysAck, MsgSysSetStatus, MsgSysEcho, MsgSysUpdateRight, MsgSysAuthQuery, MsgSysAuthTerminal, MsgSysTransBinary, MsgSysCollectBinary, MsgSysGetState, MsgSysSerialize, MsgSysEnumlobby, MsgSysEnumuser, MsgSysInfokyserver, MsgCaExchangeItem, MsgMhfServerCommand, MsgMhfSetLoginwindow, MsgMhfGetCaUniqueID |
| Object sync |
11 |
MsgSysDeleteObject, MsgSysRotateObject, MsgSysDuplicateObject, MsgSysGetObjectBinary, MsgSysGetObjectOwner, MsgSysUpdateObjectBinary, MsgSysCleanupObject, MsgSysAddObject, MsgSysDelObject, MsgSysDispObject, MsgSysHideObject |
| Misc |
7 |
MsgMhfKickExportForce, MsgMhfRegistSpabiTime, MsgMhfDebugPostValue, MsgMhfGetDailyMissionMaster, MsgMhfGetDailyMissionPersonal, MsgMhfSetDailyMissionPersonal, MsgMhfUseUdShopCoin |
| Mutex |
5 |
MsgSysCreateMutex, MsgSysCreateOpenMutex, MsgSysOpenMutex, MsgSysCloseMutex, MsgSysDeleteMutex |
| Achievement |
4 |
MsgMhfResetAchievement, MsgMhfPaymentAchievement, MsgMhfGetCaAchievementHist, MsgMhfSetCaAchievement |
| Guild |
3 |
MsgMhfUpdateForceGuildRank, MsgMhfUpdateGuild, MsgMhfUpdateGuildcard |
| Reward |
3 |
MsgMhfUseRewardSong, MsgMhfAddRewardSongCount, MsgMhfAcceptReadReward |
| Items |
3 |
MsgMhfGetExtraInfo, MsgMhfGetCogInfo, MsgMhfStampcardPrize |
| Stage |
2 |
MsgSysStageDestruct, MsgSysLeaveStage |
| Tactics / UD |
2 |
MsgMhfSetUdTacticsFollower, MsgMhfGetUdTacticsLog |
| Users |
3 |
MsgSysInsertUser, MsgSysDeleteUser, MsgSysNotifyUserBinary |
| Quest |
1 |
MsgMhfEnterTournamentQuest |
| House |
1 |
MsgMhfResetTitle |
| Event |
1 |
MsgMhfGetRestrictionEvent |
| Caravan |
1 |
MsgMhfPostRyoudama |
| Cast binary |
1 |
MsgSysCastedBinary |
| Data / Auth |
1 |
MsgSysAuthData |
| Register |
1 |
MsgSysNotifyRegister |
| Client mgmt |
2 |
MsgMhfShutClient, MsgSysHideClient |
Note: handlers_reserve.go also contains 56 empty handlers for protocol-reserved message IDs that MHF never sends — those are intentionally empty and not tracked here.
How to contribute
Pick any handler from the table above, implement it, and submit a PR. The general pattern:
- Find the handler in
server/channelserver/handlers_<subsystem>.go
- Look up the packet definition in
network/mhfpacket/msg_<name>.go
- Implement the logic, remove the
// stub: unimplemented comment
- Add a test in the corresponding
handlers_<subsystem>_test.go
See CLAUDE.md for the full contributing guide and handler architecture.
Overview
A codebase audit identified 70 channel server handlers that are empty stubs — they are registered in
handlers_table.gobut do nothing when called. This issue tracks them as a single reference point.All stubs are now annotated with
// stub: unimplementedinline, so the full live list is always one grep away:A human-readable breakdown with per-handler descriptions lives in
docs/unimplemented.md.Subsystems with unimplemented handlers
MsgHead,MsgSysAck,MsgSysSetStatus,MsgSysEcho,MsgSysUpdateRight,MsgSysAuthQuery,MsgSysAuthTerminal,MsgSysTransBinary,MsgSysCollectBinary,MsgSysGetState,MsgSysSerialize,MsgSysEnumlobby,MsgSysEnumuser,MsgSysInfokyserver,MsgCaExchangeItem,MsgMhfServerCommand,MsgMhfSetLoginwindow,MsgMhfGetCaUniqueIDMsgSysDeleteObject,MsgSysRotateObject,MsgSysDuplicateObject,MsgSysGetObjectBinary,MsgSysGetObjectOwner,MsgSysUpdateObjectBinary,MsgSysCleanupObject,MsgSysAddObject,MsgSysDelObject,MsgSysDispObject,MsgSysHideObjectMsgMhfKickExportForce,MsgMhfRegistSpabiTime,MsgMhfDebugPostValue,MsgMhfGetDailyMissionMaster,MsgMhfGetDailyMissionPersonal,MsgMhfSetDailyMissionPersonal,MsgMhfUseUdShopCoinMsgSysCreateMutex,MsgSysCreateOpenMutex,MsgSysOpenMutex,MsgSysCloseMutex,MsgSysDeleteMutexMsgMhfResetAchievement,MsgMhfPaymentAchievement,MsgMhfGetCaAchievementHist,MsgMhfSetCaAchievementMsgMhfUpdateForceGuildRank,MsgMhfUpdateGuild,MsgMhfUpdateGuildcardMsgMhfUseRewardSong,MsgMhfAddRewardSongCount,MsgMhfAcceptReadRewardMsgMhfGetExtraInfo,MsgMhfGetCogInfo,MsgMhfStampcardPrizeMsgSysStageDestruct,MsgSysLeaveStageMsgMhfSetUdTacticsFollower,MsgMhfGetUdTacticsLogMsgSysInsertUser,MsgSysDeleteUser,MsgSysNotifyUserBinaryMsgMhfEnterTournamentQuestMsgMhfResetTitleMsgMhfGetRestrictionEventMsgMhfPostRyoudamaMsgSysCastedBinaryMsgSysAuthDataMsgSysNotifyRegisterMsgMhfShutClient,MsgSysHideClientHow to contribute
Pick any handler from the table above, implement it, and submit a PR. The general pattern:
server/channelserver/handlers_<subsystem>.gonetwork/mhfpacket/msg_<name>.go// stub: unimplementedcommenthandlers_<subsystem>_test.goSee
CLAUDE.mdfor the full contributing guide and handler architecture.