///|
fn main raise {
let d = @bac.Device::new(8001, "bounded-workload", 999U)
for i = 0; i < 64; i = i + 1 {
d.add_point(
@bac.ObjectId::new(2, i),
"point-\{i}",
Analog,
Real(0.0F),
commandable=true,
)
}
let server = @bac.Server::new(d)
let client = @bac.Client::new()
for i = 0; i < 32; i = i + 1 {
let sub : @bac.SubscribeCov = {
process: i.reinterpret_as_uint(),
object: @bac.ObjectId::new(2, i),
confirmed: Some(false),
lifetime: Some(0U),
}
ignore(
@support.transact(server, client, 5, @bac.encode_subscribe_cov(sub), 0UL),
)
}
assert_eq(server.notifications(0UL).length(), 32)
let mut changes = 0
let mut traffic = 0
for i = 0; i < 4096; i = i + 1 {
let now = (i + 1).to_uint64()
let id = @bac.ObjectId::new(2, i % 64)
let value = Float::from_int(i + 1)
let body = @bac.encode_write_property({
reference: { object: id, property: 85U, index: None, },
value: [Application(Real(value))],
priority: Some(8),
})
let tx = client.start("device", 15, body, now)
let reply = server.datagram(tx.bytes, "client", now).unwrap()
traffic += tx.bytes.length() + reply.length()
assert_true(
client.receive("device", @bac.decode_datagram(reply), now)
is Some(Completed(SimpleAck(_, 15))),
)
@support.assert_real(
@support.read(
server,
client,
{ object: id, property: 85U, index: None, },
now,
),
value,
)
changes += server.notifications(now).length()
assert_eq(client.pending_count(), 0)
}
assert_eq(changes, 2048)
println(
"Scale: 64 points, 32 COV subscriptions, 4096 writes and reads, \{changes} changes; \{traffic} write/reply bytes; no pending transactions",
)
}