mirror of
https://github.com/ubf/ubf.git
synced 2026-04-18 10:46:04 +00:00
65 lines
1.5 KiB
Plaintext
65 lines
1.5 KiB
Plaintext
+NAME("irc").
|
|
|
|
+VSN("ubf1.0").
|
|
|
|
|
|
+TYPES
|
|
|
|
info() = info;
|
|
description() = description;
|
|
contract() = contract;
|
|
|
|
bool() = true | false;
|
|
nick() = string();
|
|
oldnick() = string();
|
|
newnick() = string();
|
|
group() = string();
|
|
logon() = logon;
|
|
proceed() = {ok, nick()} "A random nick is assigned";
|
|
listGroups() = groups;
|
|
groups() = [group()];
|
|
joinGroup() = {join, group()}
|
|
"You must join a group before you can send a message to it";
|
|
leaveGroup() = {leave, group()};
|
|
ok() = ok;
|
|
changeNick() = {nick, nick()} "Change your nick in all groups";
|
|
msg() = {msg, group(), string()} "send a message to a group";
|
|
msgEvent() = {msg, nick(), group(), string()};
|
|
joinEvent() = {joins, nick(), group()};
|
|
leaveEvent() = {leaves, nick(), group()};
|
|
changeNameEvent() = {changesName, oldnick(),newnick(), group()}.
|
|
|
|
%% I am assigned an initial (random) nick
|
|
|
|
+STATE start logon() => proceed() & active.
|
|
|
|
+STATE active
|
|
|
|
listGroups() => groups() & active;
|
|
joinGroup() => ok() & active;
|
|
leaveGroup() => ok() & active;
|
|
changeNick() => bool() & active;
|
|
msg() => bool() & active; % false if you have not joined the group
|
|
|
|
EVENT => msgEvent(); % A group sends me a message
|
|
EVENT => joinEvent(); % Nick joins group
|
|
EVENT => leaveEvent(); % Nick leaves group
|
|
EVENT => changeNameEvent(). % Nick changes name
|
|
|
|
+ANYSTATE
|
|
info() => string();
|
|
description() => string();
|
|
contract() => term().
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|