feat: initial server
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
use std::time::Duration;
|
||||
|
||||
use anyhow::Result;
|
||||
use open62541::*;
|
||||
use open62541_sys::*;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
let (server, runner) = Server::new();
|
||||
|
||||
let object_node_id = server.add_object_node(ObjectNode {
|
||||
requested_new_node_id: None,
|
||||
parent_node_id: ua::NodeId::ns0(UA_NS0ID_OBJECTSFOLDER),
|
||||
reference_type_id: ua::NodeId::ns0(UA_NS0ID_ORGANIZES),
|
||||
browse_name: ua::QualifiedName::new(1, "TestMachine"),
|
||||
type_definition: ua::NodeId::ns0(UA_NS0ID_FOLDERTYPE),
|
||||
attributes: ua::ObjectAttributes::default(),
|
||||
})?;
|
||||
|
||||
let variable_node_id = server.add_variable_node(VariableNode {
|
||||
requested_new_node_id: None,
|
||||
parent_node_id: object_node_id,
|
||||
reference_type_id: ua::NodeId::ns0(UA_NS0ID_ORGANIZES),
|
||||
browse_name: ua::QualifiedName::new(1, "SomeRandomValue"),
|
||||
type_definition: ua::NodeId::ns0(UA_NS0ID_BASEDATAVARIABLETYPE),
|
||||
attributes: ua::VariableAttributes::default()
|
||||
.with_data_type(&ua::NodeId::ns0(UA_NS0ID_INT32)),
|
||||
})?;
|
||||
|
||||
tokio::spawn(async move {
|
||||
let mut counter = 0i32;
|
||||
loop {
|
||||
tokio::time::sleep(Duration::from_secs(1)).await;
|
||||
|
||||
let value = ua::Int32::new(counter);
|
||||
server
|
||||
.write_value(&variable_node_id, &ua::Variant::scalar(value))
|
||||
.unwrap();
|
||||
|
||||
counter += 1;
|
||||
}
|
||||
});
|
||||
|
||||
runner.run_until_interrupt()?;
|
||||
Ok(())
|
||||
}
|
||||
Reference in New Issue
Block a user