@@ -1166,6 +1166,7 @@ G_BEGIN_DECLS
11661166struct GAFlightServerPrivate
11671167{
11681168 gaflight::Server server;
1169+ GAFlightServerOptions *options;
11691170};
11701171
11711172G_END_DECLS
@@ -1179,6 +1180,10 @@ gaflight_server_servable_interface_init(GAFlightServableInterface *iface)
11791180 iface->get_raw = gaflight_server_servable_get_raw;
11801181}
11811182
1183+ enum {
1184+ PROP_OPTIONS = 1 ,
1185+ };
1186+
11821187G_DEFINE_ABSTRACT_TYPE_WITH_CODE (
11831188 GAFlightServer, gaflight_server, G_TYPE_OBJECT , G_ADD_PRIVATE (GAFlightServer);
11841189 G_IMPLEMENT_INTERFACE (GAFLIGHT_TYPE_SERVABLE , gaflight_server_servable_interface_init))
@@ -1196,6 +1201,19 @@ gaflight_server_servable_get_raw(GAFlightServable *servable)
11961201}
11971202G_BEGIN_DECLS
11981203
1204+ static void
1205+ gaflight_server_dispose (GObject *object)
1206+ {
1207+ auto priv = GAFLIGHT_SERVER_GET_PRIVATE (object);
1208+
1209+ if (priv->options ) {
1210+ g_object_unref (priv->options );
1211+ priv->options = nullptr ;
1212+ }
1213+
1214+ G_OBJECT_CLASS (gaflight_server_parent_class)->dispose (object);
1215+ }
1216+
11991217static void
12001218gaflight_server_finalize (GObject *object)
12011219{
@@ -1205,6 +1223,24 @@ gaflight_server_finalize(GObject *object)
12051223 G_OBJECT_CLASS (gaflight_server_parent_class)->finalize (object);
12061224}
12071225
1226+ static void
1227+ gaflight_server_get_property (GObject *object,
1228+ guint prop_id,
1229+ GValue *value,
1230+ GParamSpec *pspec)
1231+ {
1232+ auto priv = GAFLIGHT_SERVER_GET_PRIVATE (object);
1233+
1234+ switch (prop_id) {
1235+ case PROP_OPTIONS :
1236+ g_value_set_object (value, priv->options );
1237+ break ;
1238+ default :
1239+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
1240+ break ;
1241+ }
1242+ }
1243+
12081244static void
12091245gaflight_server_init (GAFlightServer *object)
12101246{
@@ -1216,7 +1252,24 @@ static void
12161252gaflight_server_class_init (GAFlightServerClass *klass)
12171253{
12181254 auto gobject_class = G_OBJECT_CLASS (klass);
1255+ gobject_class->dispose = gaflight_server_dispose;
12191256 gobject_class->finalize = gaflight_server_finalize;
1257+ gobject_class->get_property = gaflight_server_get_property;
1258+
1259+ GParamSpec *spec;
1260+ /* *
1261+ * GAFlightServer:options:
1262+ *
1263+ * The options used in this server.
1264+ *
1265+ * Since: 26.0.0
1266+ */
1267+ spec = g_param_spec_object (" options" ,
1268+ " Options" ,
1269+ " The options used in this server" ,
1270+ GAFLIGHT_TYPE_SERVER_OPTIONS ,
1271+ static_cast <GParamFlags>(G_PARAM_READABLE ));
1272+ g_object_class_install_property (gobject_class, PROP_OPTIONS , spec);
12201273}
12211274
12221275/* *
@@ -1236,6 +1289,14 @@ gaflight_server_listen(GAFlightServer *server,
12361289{
12371290 auto flight_server = gaflight_servable_get_raw (GAFLIGHT_SERVABLE (server));
12381291 const auto flight_options = gaflight_server_options_get_raw (options);
1292+ auto priv = GAFLIGHT_SERVER_GET_PRIVATE (server);
1293+ if (priv->options != options) {
1294+ g_object_ref (options);
1295+ if (priv->options ) {
1296+ g_object_unref (priv->options );
1297+ }
1298+ priv->options = options;
1299+ }
12391300 return garrow::check (error,
12401301 flight_server->Init (*flight_options),
12411302 " [flight-server][listen]" );
0 commit comments