summaryrefslogtreecommitdiffhomepage
path: root/it-it/solidity.html.markdown
diff options
context:
space:
mode:
authorAl <80943867+al-ias@users.noreply.github.com>2022-07-23 20:30:30 +0200
committerAl <80943867+al-ias@users.noreply.github.com>2022-07-23 20:30:30 +0200
commitdde96818dc33c2d49dd9ba30244244dadb38cd3b (patch)
tree546ac457abeeaf16499bbbde648604eac6d68cd4 /it-it/solidity.html.markdown
parent118bda3ead4e3c3da913931f028d06a07eb3db19 (diff)
Translate pattern observer (9.F)
Diffstat (limited to 'it-it/solidity.html.markdown')
-rw-r--r--it-it/solidity.html.markdown38
1 files changed, 38 insertions, 0 deletions
diff --git a/it-it/solidity.html.markdown b/it-it/solidity.html.markdown
index 55649eab..94fb4803 100644
--- a/it-it/solidity.html.markdown
+++ b/it-it/solidity.html.markdown
@@ -756,4 +756,42 @@ reveal(100, "ilMioSegreto");
// in base all'orario; si può creare un codice esterno che li pinghi reglarmente
// oppure fornire degli incentivi (ether) a qualcun'altro che lo faccia
+// F. Pattern Observer
+// Un pattern observer permette di iscriversi come osservatore e
+// registrare una funzione che verrà chiamata dall'oracle
+// (N.B. l'oracolo paga perchè sia eseguita quest'azione)
+// Ci sono alcune somoglianze nella registrazione con Pub/sub
+
+// Questo è un contratto astratto che importano sia il client che il server
+// Il client dovrebbe implementarlo
+contract SomeOracleCallback {
+ function oracleCallback(int _value, uint _time, bytes32 info) external;
+}
+
+contract SomeOracle {
+ SomeOracleCallback[] callbacks; // array di tutti gli osservatori iscritti
+
+ // Osservatori iscritti
+ function addSubscriber(SomeOracleCallback a) {
+ callbacks.push(a);
+ }
+
+ function notify(value, time, info) private {
+ for(uint i = 0;i < callbacks.length; i++) {
+ // tutti gli osservatori iscritti dovranno implementare la oracleCallback
+ callbacks[i].oracleCallback(value, time, info);
+ }
+ }
+
+ function doSomething() public {
+ // Codice che fa qualcosa
+
+ // Notifica a tutti gli iscritti
+ notify(_value, _time, _info);
+ }
+}
+
+// Il contratto client può aggiungersi agli iscritti (con addSubscriber)
+// del contratto SomeOracle, importando SomeOracleCallback
+
```