public void Send <T>(Offset <T> message) where T : struct, IFlatbufferObject { ClientServerMessage.StartClientServerMessage(builder); if (message is Offset <GetVersionMessage> ) { ClientServerMessage.AddContentType(builder, ClientServerMessageContent.GetVersionMessage); } else if (message is Offset <EnterQueueMessage> ) { ClientServerMessage.AddContentType(builder, ClientServerMessageContent.EnterQueueMessage); } else if (message is Offset <LeaveQueueMessage> ) { ClientServerMessage.AddContentType(builder, ClientServerMessageContent.LeaveQueueMessage); } else if (message is Offset <CreateRoomMessage> ) { ClientServerMessage.AddContentType(builder, ClientServerMessageContent.CreateRoomMessage); } else if (message is Offset <LeaveRoomMessage> ) { ClientServerMessage.AddContentType(builder, ClientServerMessageContent.LeaveRoomMessage); } else if (message is Offset <EnterRoomMessage> ) { ClientServerMessage.AddContentType(builder, ClientServerMessageContent.EnterRoomMessage); } else if (message is Offset <StartRoomMessage> ) { ClientServerMessage.AddContentType(builder, ClientServerMessageContent.StartRoomMessage); } else if (message is Offset <SelectTeamMessage> ) { ClientServerMessage.AddContentType(builder, ClientServerMessageContent.SelectTeamMessage); } else if (message is Offset <ConnectMessage> ) { ClientServerMessage.AddContentType(builder, ClientServerMessageContent.ConnectMessage); } else if (message is Offset <ClientReadyMessage> ) { ClientServerMessage.AddContentType(builder, ClientServerMessageContent.ClientReadyMessage); } else if (message is Offset <ClientInputMessage> ) { ClientServerMessage.AddContentType(builder, ClientServerMessageContent.ClientInputMessage); } else if (message is Offset <ClientActionMessage> ) { ClientServerMessage.AddContentType(builder, ClientServerMessageContent.ClientActionMessage); } else { throw new NotImplementedException("Message type not implemented!"); } ClientServerMessage.AddContent(builder, message.Value); var clientServerMessage = ClientServerMessage.EndClientServerMessage(builder); builder.Finish(clientServerMessage.Value); byte[] buf = builder.SizedByteArray(); if (message is Offset <ClientInputMessage> ) { netClient.SendUnreliable(buf, Convert.ToUInt16(buf.Length)); } else { netClient.SendReliable(buf, Convert.ToUInt16(buf.Length)); } builder.Clear(); }