Skip to content

Commit 1606d2c

Browse files
authored
Runtime shutdown with optional timeout (#110)
1 parent b657990 commit 1606d2c

36 files changed

Lines changed: 272 additions & 275 deletions

File tree

Cargo.lock

Lines changed: 16 additions & 24 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dep_config.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@
5151
"scursor": {
5252
"url": "https://github.com/stepfunc/scursor"
5353
},
54+
"sfio-promise": {
55+
"url": "https://github.com/stepfunc/promise"
56+
},
5457
"sfio-tokio-ffi": {
5558
"url": "https://github.com/stepfunc/tokio-ffi"
5659
},

ffi/bindings/c/client_example.c

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,18 @@ void on_port_state_change(rodbus_port_state_t state, void *ctx)
6464

6565
rodbus_client_state_listener_t get_client_listener()
6666
{
67-
return rodbus_client_state_listener_init(on_client_state_change, NULL, NULL);
67+
return (rodbus_client_state_listener_t) {
68+
.on_change = &on_client_state_change,
69+
};
6870
}
6971

70-
rodbus_port_state_listener_t get_port_listener()
71-
{
72-
return rodbus_port_state_listener_init(on_port_state_change, NULL, NULL);
72+
rodbus_port_state_listener_t get_port_listener(){
73+
return (rodbus_port_state_listener_t) {
74+
.on_change = &on_port_state_change,
75+
};
7376
}
7477

78+
7579
run_channel(rodbus_client_channel_t* channel)
7680
{
7781
// ANCHOR: enable_channel
@@ -93,26 +97,20 @@ run_channel(rodbus_client_channel_t* channel)
9397
// ANCHOR_END: address_range
9498

9599
// ANCHOR: bit_read_callback_init
96-
rodbus_bit_read_callback_t bit_callback = rodbus_bit_read_callback_init(
97-
on_read_bits_complete, // Success callback
98-
on_read_bits_failure, // Failure callback
99-
NULL, // Destroy callback
100-
NULL // Callback context
101-
);
100+
rodbus_bit_read_callback_t bit_callback = {
101+
.on_complete = &on_read_bits_complete,
102+
.on_failure = &on_read_bits_failure,
103+
};
102104
// ANCHOR_END: bit_read_callback_init
103-
rodbus_register_read_callback_t register_callback = rodbus_register_read_callback_init(
104-
on_read_registers_complete, // Success callback
105-
on_read_registers_failure, // Failure callback
106-
NULL, // Destroy callback
107-
NULL // Callback context
108-
);
105+
rodbus_register_read_callback_t register_callback = {
106+
.on_complete = on_read_registers_complete, // Success callback
107+
.on_failure = on_read_registers_failure, // Failure callback
108+
};
109109
// ANCHOR: write_callback_init
110-
rodbus_write_callback_t write_callback = rodbus_write_callback_init(
111-
on_write_complete, // Success callback
112-
on_write_failure, // Failure callback
113-
NULL, // Destroy callback
114-
NULL // Callback context
115-
);
110+
rodbus_write_callback_t write_callback = {
111+
.on_complete = on_write_complete,
112+
.on_failure = on_write_failure,
113+
};
116114
/// ANCHOR_END: write_callback_init
117115

118116
char cbuf[10];
@@ -304,7 +302,7 @@ int main(int argc, char* argv[])
304302
{
305303
// ANCHOR: logging_init
306304
// initialize logging with the default configuration
307-
rodbus_logger_t logger = rodbus_logger_init(&on_log_message, NULL, NULL);
305+
rodbus_logger_t logger = {.on_message = on_log_message};
308306
rodbus_configure_logging(rodbus_logging_config_init(), logger);
309307
// ANCHOR_END: logging_init
310308

ffi/bindings/c/server_example.c

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -154,17 +154,20 @@ int run_server(rodbus_server_t* server)
154154
}
155155
else if (strcmp(cbuf, "uc\n") == 0) {
156156
// ANCHOR: update_coil
157-
rodbus_server_update_database(server, 1, rodbus_database_callback_init(update_coil, NULL, &state));
157+
rodbus_server_update_database(server, 1, (rodbus_database_callback_t) {
158+
.callback = update_coil,
159+
.ctx = &state,
160+
});
158161
// ANCHOR_END: update_coil
159162
}
160163
else if (strcmp(cbuf, "udi\n") == 0) {
161-
rodbus_server_update_database(server, 1, rodbus_database_callback_init(update_discrete_input, NULL, &state));
164+
rodbus_server_update_database(server, 1, (rodbus_database_callback_t){.callback = update_discrete_input, .ctx = &state});
162165
}
163166
else if (strcmp(cbuf, "uhr\n") == 0) {
164-
rodbus_server_update_database(server, 1, rodbus_database_callback_init(update_holding_register, NULL, &state));
167+
rodbus_server_update_database(server, 1, (rodbus_database_callback_t){.callback = update_holding_register, .ctx = &state});
165168
}
166169
else if (strcmp(cbuf, "uir\n") == 0) {
167-
rodbus_server_update_database(server, 1, rodbus_database_callback_init(update_input_register, NULL, &state));
170+
rodbus_server_update_database(server, 1, (rodbus_database_callback_t){.callback = update_input_register, .ctx = &state});
168171
}
169172
else {
170173
printf("Unknown command\n");
@@ -179,14 +182,17 @@ int run_server(rodbus_server_t* server)
179182
rodbus_device_map_t* build_device_map()
180183
{
181184
// ANCHOR: device_map_init
182-
rodbus_write_handler_t write_handler =
183-
rodbus_write_handler_init(&on_write_single_coil, &on_write_single_register, &on_write_multiple_coils, &on_write_multiple_registers, NULL, NULL);
184-
185+
rodbus_write_handler_t write_handler = {
186+
.write_single_coil = on_write_single_coil,
187+
.write_single_register = on_write_single_register,
188+
.write_multiple_coils = on_write_multiple_coils,
189+
.write_multiple_registers = on_write_multiple_registers,
190+
};
185191
rodbus_device_map_t* map = rodbus_device_map_create();
186192
rodbus_device_map_add_endpoint(map,
187193
1, // Unit ID
188194
write_handler, // Handler for write requests
189-
rodbus_database_callback_init(configure_db, NULL, NULL) // Callback for the initial state of the database
195+
(rodbus_database_callback_t){.callback = configure_db } // Callback for the initial state of the database
190196
);
191197
// ANCHOR_END: device_map_init
192198

@@ -234,11 +240,16 @@ int run_rtu_channel(rodbus_runtime_t* runtime)
234240
rodbus_authorization_handler_t get_auth_handler()
235241
{
236242
// ANCHOR: auth_handler_init
237-
rodbus_authorization_handler_t auth_handler = rodbus_authorization_handler_init(
238-
&auth_read, &auth_read, &auth_read, &auth_read,
239-
&auth_single_write, &auth_single_write, &auth_multiple_writes, &auth_multiple_writes,
240-
NULL, NULL
241-
);
243+
rodbus_authorization_handler_t auth_handler = {
244+
.read_coils = auth_read,
245+
.read_discrete_inputs = auth_read,
246+
.read_holding_registers = auth_read,
247+
.read_input_registers = auth_read,
248+
.write_single_coil = auth_single_write,
249+
.write_single_register = auth_single_write,
250+
.write_multiple_coils = auth_multiple_writes,
251+
.write_multiple_registers = auth_multiple_writes,
252+
};
242253
// ANCHOR_END: auth_handler_init
243254

244255
return auth_handler;
@@ -324,7 +335,7 @@ int create_and_run_channel(int argc, char *argv[], rodbus_runtime_t *runtime)
324335
int main(int argc, char* argv[])
325336
{
326337
// initialize logging with the default configuration
327-
rodbus_logger_t logger = rodbus_logger_init(&on_log_message, NULL, NULL);
338+
rodbus_logger_t logger = {.on_message = on_log_message};
328339
rodbus_configure_logging(rodbus_logging_config_init(), logger);
329340

330341
// Create runtime

ffi/rodbus-bindings/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ repository = "https://github.com/stepfunc/rodbus"
1010
readme = "../README.md"
1111

1212
[dependencies]
13-
oo-bindgen = "0.6"
13+
oo-bindgen = "0.8"
1414
rodbus-schema = { path = "../rodbus-schema" }
1515
tracing = "^0.1"
1616
tracing-subscriber = "^0.3"

ffi/rodbus-ffi-java/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,4 @@ tls = ["rodbus-ffi/tls"]
1919

2020
[build-dependencies]
2121
rodbus-schema = { path = "../rodbus-schema" }
22-
oo-bindgen = "0.6"
22+
oo-bindgen = "0.8"

ffi/rodbus-ffi-java/build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ fn main() {
1414

1515
match rodbus_schema::build_lib() {
1616
Err(err) => {
17-
eprintln!("{}", err);
17+
eprintln!("{err}");
1818
std::process::exit(-1);
1919
}
2020
Ok(lib) => {

ffi/rodbus-ffi-java/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
clippy::let_unit_value,
77
clippy::needless_return,
88
clippy::not_unsafe_ptr_arg_deref,
9+
clippy::uninlined_format_args,
910
unused_variables,
1011
dead_code
1112
)]

ffi/rodbus-ffi/Cargo.toml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@ tracing-subscriber = "0.2"
2020
rodbus = { path = "../../rodbus", default-features = false }
2121
tokio = { version = "1.5", features = ["rt-multi-thread"]}
2222
num_cpus = "1"
23+
sfio-promise = "0.2"
2324

2425
[build-dependencies]
2526
rodbus-schema = { path = "../rodbus-schema" }
26-
oo-bindgen = "0.6"
27-
sfio-tracing-ffi = "0.5"
28-
sfio-tokio-ffi = "0.5"
27+
oo-bindgen = "0.8"
28+
sfio-tracing-ffi = "0.8"
29+
sfio-tokio-ffi = "0.8"
2930

3031

3132
[features]

ffi/rodbus-ffi/build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ fn main() {
2929
oo_bindgen::backend::rust::generate_ffi(&lib).unwrap();
3030
}
3131
Err(err) => {
32-
eprintln!("rodbus model error: {}", err);
32+
eprintln!("rodbus model error: {err}");
3333
std::process::exit(-1);
3434
}
3535
};

0 commit comments

Comments
 (0)