Skip to content

Instantly share code, notes, and snippets.

@James-Frowen
Last active September 21, 2025 21:13
Show Gist options
  • Save James-Frowen/40917cfb2cb8875a695a3c95a2cb6282 to your computer and use it in GitHub Desktop.
Save James-Frowen/40917cfb2cb8875a695a3c95a2cb6282 to your computer and use it in GitHub Desktop.
How to register and send custom NetworkMessages with Mirage
public static class CustomMessageExample
{
public struct MyMessage
{
public string ModName;
public int ModVersion;
}
public static void Setup()
{
// manually register functions so mirage can use them when sending MyMessage
Mirage.Serialization.Writer<MyMessage>.Write = WriteMyMessage;
Mirage.Serialization.Reader<MyMessage>.Read = ReadMyMessage;
}
private static void WriteMyMessage(NetworkWriter writer, MyMessage message)
{
writer.WriteString(message.ModName);
writer.WritePackedInt32(message.ModVersion);
}
private static MyMessage ReadMyMessage(NetworkReader reader)
{
// make sure to read in same order as writing
var name = reader.ReadString();
var version = reader.ReadPackedInt32();
return new MyMessage
{
ModName = name,
ModVersion = version,
};
}
public static void SetupHandler(NetworkServer server) // or use NetworkClient
{
server.MessageHandler.RegisterHandler<MyMessage>(HandleMyMessage);
}
private static void HandleMyMessage(INetworkPlayer player, MyMessage message)
{
// do stuff with message here
}
public static void SendCustomMessage(INetworkPlayer player)
{
// do this anywhere to send message
player.Send(new MyMessage
{
ModName = "My Cool Mod",
ModVersion = 1,
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment