mirror of
https://github.com/vacp2p/nim-libp2p-experimental.git
synced 2025-02-21 22:38:24 +00:00
update website
This commit is contained in:
parent
ef14ec5e93
commit
fb5b437d6b
@ -8,8 +8,10 @@
|
||||
|
||||
|
||||
|
||||
<link rel="icon" href="https://docs.libp2p.io/images/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.1, mkdocs-material-8.5.7">
|
||||
|
||||
|
||||
<link rel="icon" href="https://libp2p.io/img/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.15">
|
||||
|
||||
|
||||
|
||||
@ -17,11 +19,10 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/nim-libp2p/docs/assets/stylesheets/main.20d9efc8.min.css">
|
||||
<link rel="stylesheet" href="/nim-libp2p/docs/assets/stylesheets/main.26e3688c.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/nim-libp2p/docs/assets/stylesheets/palette.cbb835fc.min.css">
|
||||
|
||||
<link rel="stylesheet" href="/nim-libp2p/docs/assets/stylesheets/palette.ecc896b0.min.css">
|
||||
|
||||
|
||||
|
||||
@ -54,7 +55,7 @@
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="">
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
|
||||
@ -73,11 +74,13 @@
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
|
||||
|
||||
<header class="md-header md-header--shadow" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href="/nim-libp2p/docs/." title="nim-libp2p" class="md-header__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
@ -100,27 +103,31 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
</form>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -150,7 +157,7 @@
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list"></ol>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -162,7 +169,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -196,7 +203,7 @@
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href="/nim-libp2p/docs/." title="nim-libp2p" class="md-nav__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
nim-libp2p
|
||||
@ -206,7 +213,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -227,17 +234,18 @@
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_1" type="checkbox" id="__nav_1" >
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" >
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_1">
|
||||
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
|
||||
Tutorials
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" aria-label="Tutorials" data-md-level="1">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_1">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Tutorials
|
||||
@ -438,10 +446,10 @@
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
<script id="__config" type="application/json">{"base": "/nim-libp2p/docs/", "features": ["navigation.instant", "search.highlight"], "search": "/nim-libp2p/docs/assets/javascripts/workers/search.16e2a7d4.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script>
|
||||
<script id="__config" type="application/json">{"base": "/nim-libp2p/docs/", "features": ["navigation.instant", "search.highlight"], "search": "/nim-libp2p/docs/assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
||||
|
||||
|
||||
<script src="/nim-libp2p/docs/assets/javascripts/bundle.8492ddcf.min.js"></script>
|
||||
<script src="/nim-libp2p/docs/assets/javascripts/bundle.b4d07000.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
29
docs/assets/javascripts/bundle.8492ddcf.min.js
vendored
29
docs/assets/javascripts/bundle.8492ddcf.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
29
docs/assets/javascripts/bundle.b4d07000.min.js
vendored
Normal file
29
docs/assets/javascripts/bundle.b4d07000.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
8
docs/assets/javascripts/bundle.b4d07000.min.js.map
Normal file
8
docs/assets/javascripts/bundle.b4d07000.min.js.map
Normal file
File diff suppressed because one or more lines are too long
1
docs/assets/javascripts/lunr/min/lunr.hy.min.js
vendored
Normal file
1
docs/assets/javascripts/lunr/min/lunr.hy.min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hy=function(){this.pipeline.reset(),this.pipeline.add(e.hy.trimmer,e.hy.stopWordFilter)},e.hy.wordCharacters="[A-Za-z-֏ff-ﭏ]",e.hy.trimmer=e.trimmerSupport.generateTrimmer(e.hy.wordCharacters),e.Pipeline.registerFunction(e.hy.trimmer,"trimmer-hy"),e.hy.stopWordFilter=e.generateStopWordFilter("դու և եք էիր էիք հետո նաև նրանք որը վրա է որ պիտի են այս մեջ ն իր ու ի այդ որոնք այն կամ էր մի ես համար այլ իսկ էին ենք հետ ին թ էինք մենք նրա նա դուք եմ էի ըստ որպես ում".split(" ")),e.Pipeline.registerFunction(e.hy.stopWordFilter,"stopWordFilter-hy"),e.hy.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}(),e.Pipeline.registerFunction(e.hy.stemmer,"stemmer-hy")}});
|
1
docs/assets/javascripts/lunr/min/lunr.kn.min.js
vendored
Normal file
1
docs/assets/javascripts/lunr/min/lunr.kn.min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.kn=function(){this.pipeline.reset(),this.pipeline.add(e.kn.trimmer,e.kn.stopWordFilter,e.kn.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.kn.stemmer))},e.kn.wordCharacters="ಀ-಄ಅ-ಔಕ-ಹಾ-ೌ಼-ಽೕ-ೖೝ-ೞೠ-ೡೢ-ೣ೦-೯ೱ-ೳ",e.kn.trimmer=e.trimmerSupport.generateTrimmer(e.kn.wordCharacters),e.Pipeline.registerFunction(e.kn.trimmer,"trimmer-kn"),e.kn.stopWordFilter=e.generateStopWordFilter("ಮತ್ತು ಈ ಒಂದು ರಲ್ಲಿ ಹಾಗೂ ಎಂದು ಅಥವಾ ಇದು ರ ಅವರು ಎಂಬ ಮೇಲೆ ಅವರ ತನ್ನ ಆದರೆ ತಮ್ಮ ನಂತರ ಮೂಲಕ ಹೆಚ್ಚು ನ ಆ ಕೆಲವು ಅನೇಕ ಎರಡು ಹಾಗು ಪ್ರಮುಖ ಇದನ್ನು ಇದರ ಸುಮಾರು ಅದರ ಅದು ಮೊದಲ ಬಗ್ಗೆ ನಲ್ಲಿ ರಂದು ಇತರ ಅತ್ಯಂತ ಹೆಚ್ಚಿನ ಸಹ ಸಾಮಾನ್ಯವಾಗಿ ನೇ ಹಲವಾರು ಹೊಸ ದಿ ಕಡಿಮೆ ಯಾವುದೇ ಹೊಂದಿದೆ ದೊಡ್ಡ ಅನ್ನು ಇವರು ಪ್ರಕಾರ ಇದೆ ಮಾತ್ರ ಕೂಡ ಇಲ್ಲಿ ಎಲ್ಲಾ ವಿವಿಧ ಅದನ್ನು ಹಲವು ರಿಂದ ಕೇವಲ ದ ದಕ್ಷಿಣ ಗೆ ಅವನ ಅತಿ ನೆಯ ಬಹಳ ಕೆಲಸ ಎಲ್ಲ ಪ್ರತಿ ಇತ್ಯಾದಿ ಇವು ಬೇರೆ ಹೀಗೆ ನಡುವೆ ಇದಕ್ಕೆ ಎಸ್ ಇವರ ಮೊದಲು ಶ್ರೀ ಮಾಡುವ ಇದರಲ್ಲಿ ರೀತಿಯ ಮಾಡಿದ ಕಾಲ ಅಲ್ಲಿ ಮಾಡಲು ಅದೇ ಈಗ ಅವು ಗಳು ಎ ಎಂಬುದು ಅವನು ಅಂದರೆ ಅವರಿಗೆ ಇರುವ ವಿಶೇಷ ಮುಂದೆ ಅವುಗಳ ಮುಂತಾದ ಮೂಲ ಬಿ ಮೀ ಒಂದೇ ಇನ್ನೂ ಹೆಚ್ಚಾಗಿ ಮಾಡಿ ಅವರನ್ನು ಇದೇ ಯ ರೀತಿಯಲ್ಲಿ ಜೊತೆ ಅದರಲ್ಲಿ ಮಾಡಿದರು ನಡೆದ ಆಗ ಮತ್ತೆ ಪೂರ್ವ ಆತ ಬಂದ ಯಾವ ಒಟ್ಟು ಇತರೆ ಹಿಂದೆ ಪ್ರಮಾಣದ ಗಳನ್ನು ಕುರಿತು ಯು ಆದ್ದರಿಂದ ಅಲ್ಲದೆ ನಗರದ ಮೇಲಿನ ಏಕೆಂದರೆ ರಷ್ಟು ಎಂಬುದನ್ನು ಬಾರಿ ಎಂದರೆ ಹಿಂದಿನ ಆದರೂ ಆದ ಸಂಬಂಧಿಸಿದ ಮತ್ತೊಂದು ಸಿ ಆತನ ".split(" ")),e.kn.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.kn.tokenizer=function(t){if(!arguments.length||null==t||void 0==t)return[];if(Array.isArray(t))return t.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var n=t.toString().toLowerCase().replace(/^\s+/,"");return r.cut(n).split("|")},e.Pipeline.registerFunction(e.kn.stemmer,"stemmer-kn"),e.Pipeline.registerFunction(e.kn.stopWordFilter,"stopWordFilter-kn")}});
|
File diff suppressed because one or more lines are too long
1
docs/assets/javascripts/lunr/min/lunr.sa.min.js
vendored
Normal file
1
docs/assets/javascripts/lunr/min/lunr.sa.min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sa=function(){this.pipeline.reset(),this.pipeline.add(e.sa.trimmer,e.sa.stopWordFilter,e.sa.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sa.stemmer))},e.sa.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿ꣠-꣱ꣲ-ꣷ꣸-ꣻ꣼-ꣽꣾ-ꣿᆰ0-ᆰ9",e.sa.trimmer=e.trimmerSupport.generateTrimmer(e.sa.wordCharacters),e.Pipeline.registerFunction(e.sa.trimmer,"trimmer-sa"),e.sa.stopWordFilter=e.generateStopWordFilter('तथा अयम् एकम् इत्यस्मिन् तथा तत् वा अयम् इत्यस्य ते आहूत उपरि तेषाम् किन्तु तेषाम् तदा इत्यनेन अधिकः इत्यस्य तत् केचन बहवः द्वि तथा महत्वपूर्णः अयम् अस्य विषये अयं अस्ति तत् प्रथमः विषये इत्युपरि इत्युपरि इतर अधिकतमः अधिकः अपि सामान्यतया ठ इतरेतर नूतनम् द न्यूनम् कश्चित् वा विशालः द सः अस्ति तदनुसारम् तत्र अस्ति केवलम् अपि अत्र सर्वे विविधाः तत् बहवः यतः इदानीम् द दक्षिण इत्यस्मै तस्य उपरि नथ अतीव कार्यम् सर्वे एकैकम् इत्यादि। एते सन्ति उत इत्थम् मध्ये एतदर्थं . स कस्य प्रथमः श्री. करोति अस्मिन् प्रकारः निर्मिता कालः तत्र कर्तुं समान अधुना ते सन्ति स एकः अस्ति सः अर्थात् तेषां कृते . स्थितम् विशेषः अग्रिम तेषाम् समान स्रोतः ख म समान इदानीमपि अधिकतया करोतु ते समान इत्यस्य वीथी सह यस्मिन् कृतवान् धृतः तदा पुनः पूर्वं सः आगतः किम् कुल इतर पुरा मात्रा स विषये उ अतएव अपि नगरस्य उपरि यतः प्रतिशतं कतरः कालः साधनानि भूत तथापि जात सम्बन्धि अन्यत् ग अतः अस्माकं स्वकीयाः अस्माकं इदानीं अन्तः इत्यादयः भवन्तः इत्यादयः एते एताः तस्य अस्य इदम् एते तेषां तेषां तेषां तान् तेषां तेषां तेषां समानः सः एकः च तादृशाः बहवः अन्ये च वदन्ति यत् कियत् कस्मै कस्मै यस्मै यस्मै यस्मै यस्मै न अतिनीचः किन्तु प्रथमं सम्पूर्णतया ततः चिरकालानन्तरं पुस्तकं सम्पूर्णतया अन्तः किन्तु अत्र वा इह इव श्रद्धाय अवशिष्यते परन्तु अन्ये वर्गाः सन्ति ते सन्ति शक्नुवन्ति सर्वे मिलित्वा सर्वे एकत्र"'.split(" ")),e.sa.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.sa.tokenizer=function(t){if(!arguments.length||null==t||void 0==t)return[];if(Array.isArray(t))return t.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var i=t.toString().toLowerCase().replace(/^\s+/,"");return r.cut(i).split("|")},e.Pipeline.registerFunction(e.sa.stemmer,"stemmer-sa"),e.Pipeline.registerFunction(e.sa.stopWordFilter,"stopWordFilter-sa")}});
|
1
docs/assets/javascripts/lunr/min/lunr.te.min.js
vendored
Normal file
1
docs/assets/javascripts/lunr/min/lunr.te.min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.te=function(){this.pipeline.reset(),this.pipeline.add(e.te.trimmer,e.te.stopWordFilter,e.te.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.te.stemmer))},e.te.wordCharacters="ఀ-ఄఅ-ఔక-హా-ౌౕ-ౖౘ-ౚౠ-ౡౢ-ౣ౦-౯౸-౿఼ఽ్ౝ౷",e.te.trimmer=e.trimmerSupport.generateTrimmer(e.te.wordCharacters),e.Pipeline.registerFunction(e.te.trimmer,"trimmer-te"),e.te.stopWordFilter=e.generateStopWordFilter("అందరూ అందుబాటులో అడగండి అడగడం అడ్డంగా అనుగుణంగా అనుమతించు అనుమతిస్తుంది అయితే ఇప్పటికే ఉన్నారు ఎక్కడైనా ఎప్పుడు ఎవరైనా ఎవరో ఏ ఏదైనా ఏమైనప్పటికి ఒక ఒకరు కనిపిస్తాయి కాదు కూడా గా గురించి చుట్టూ చేయగలిగింది తగిన తర్వాత దాదాపు దూరంగా నిజంగా పై ప్రకారం ప్రక్కన మధ్య మరియు మరొక మళ్ళీ మాత్రమే మెచ్చుకో వద్ద వెంట వేరుగా వ్యతిరేకంగా సంబంధం".split(" ")),e.te.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.te.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.te.stemmer,"stemmer-te"),e.Pipeline.registerFunction(e.te.stopWordFilter,"stopWordFilter-te")}});
|
@ -1 +1 @@
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r(require("@node-rs/jieba")):r()(e.lunr)}(this,function(e){return function(r,t){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==r.version[0];r.zh=function(){this.pipeline.reset(),this.pipeline.add(r.zh.trimmer,r.zh.stopWordFilter,r.zh.stemmer),i?this.tokenizer=r.zh.tokenizer:(r.tokenizer&&(r.tokenizer=r.zh.tokenizer),this.tokenizerFn&&(this.tokenizerFn=r.zh.tokenizer))},r.zh.tokenizer=function(n){if(!arguments.length||null==n||void 0==n)return[];if(Array.isArray(n))return n.map(function(e){return i?new r.Token(e.toLowerCase()):e.toLowerCase()});t&&e.load(t);var o=n.toString().trim().toLowerCase(),s=[];e.cut(o,!0).forEach(function(e){s=s.concat(e.split(" "))}),s=s.filter(function(e){return!!e});var u=0;return s.map(function(e,t){if(i){var n=o.indexOf(e,u),s={};return s.position=[n,e.length],s.index=t,u=n,new r.Token(e,s)}return e})},r.zh.wordCharacters="\\w一-龥",r.zh.trimmer=r.trimmerSupport.generateTrimmer(r.zh.wordCharacters),r.Pipeline.registerFunction(r.zh.trimmer,"trimmer-zh"),r.zh.stemmer=function(){return function(e){return e}}(),r.Pipeline.registerFunction(r.zh.stemmer,"stemmer-zh"),r.zh.stopWordFilter=r.generateStopWordFilter("的 一 不 在 人 有 是 为 以 于 上 他 而 后 之 来 及 了 因 下 可 到 由 这 与 也 此 但 并 个 其 已 无 小 我 们 起 最 再 今 去 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 别 趁 当 从 到 得 打 凡 儿 尔 该 各 给 跟 和 何 还 即 几 既 看 据 距 靠 啦 了 另 么 每 们 嘛 拿 哪 那 您 凭 且 却 让 仍 啥 如 若 使 谁 虽 随 同 所 她 哇 嗡 往 哪 些 向 沿 哟 用 于 咱 则 怎 曾 至 致 着 诸 自".split(" ")),r.Pipeline.registerFunction(r.zh.stopWordFilter,"stopWordFilter-zh")}});
|
||||
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r(require("@node-rs/jieba")):r()(e.lunr)}(this,function(e){return function(r,t){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==r.version[0];r.zh=function(){this.pipeline.reset(),this.pipeline.add(r.zh.trimmer,r.zh.stopWordFilter,r.zh.stemmer),i?this.tokenizer=r.zh.tokenizer:(r.tokenizer&&(r.tokenizer=r.zh.tokenizer),this.tokenizerFn&&(this.tokenizerFn=r.zh.tokenizer))},r.zh.tokenizer=function(n){if(!arguments.length||null==n||void 0==n)return[];if(Array.isArray(n))return n.map(function(e){return i?new r.Token(e.toLowerCase()):e.toLowerCase()});t&&e.load(t);var o=n.toString().trim().toLowerCase(),s=[];e.cut(o,!0).forEach(function(e){s=s.concat(e.split(" "))}),s=s.filter(function(e){return!!e});var u=0;return s.map(function(e,t){if(i){var n=o.indexOf(e,u),s={};return s.position=[n,e.length],s.index=t,u=n,new r.Token(e,s)}return e})},r.zh.wordCharacters="\\w一-龥",r.zh.trimmer=r.trimmerSupport.generateTrimmer(r.zh.wordCharacters),r.Pipeline.registerFunction(r.zh.trimmer,"trimmer-zh"),r.zh.stemmer=function(){return function(e){return e}}(),r.Pipeline.registerFunction(r.zh.stemmer,"stemmer-zh"),r.zh.stopWordFilter=r.generateStopWordFilter("的 一 不 在 人 有 是 为 為 以 于 於 上 他 而 后 後 之 来 來 及 了 因 下 可 到 由 这 這 与 與 也 此 但 并 並 个 個 其 已 无 無 小 我 们 們 起 最 再 今 去 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 别 趁 当 當 从 從 得 打 凡 儿 兒 尔 爾 该 該 各 给 給 跟 和 何 还 還 即 几 幾 既 看 据 據 距 靠 啦 另 么 麽 每 嘛 拿 哪 您 凭 憑 且 却 卻 让 讓 仍 啥 如 若 使 谁 誰 虽 雖 随 隨 同 所 她 哇 嗡 往 些 向 沿 哟 喲 用 咱 则 則 怎 曾 至 致 着 著 诸 諸 自".split(" ")),r.Pipeline.registerFunction(r.zh.stopWordFilter,"stopWordFilter-zh")}});
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
docs/assets/stylesheets/main.26e3688c.min.css
vendored
Normal file
1
docs/assets/stylesheets/main.26e3688c.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
docs/assets/stylesheets/main.26e3688c.min.css.map
Normal file
1
docs/assets/stylesheets/main.26e3688c.min.css.map
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
{"version":3,"sources":["src/assets/stylesheets/palette/_scheme.scss","../../../src/assets/stylesheets/palette.scss","src/assets/stylesheets/palette/_accent.scss","src/assets/stylesheets/palette/_primary.scss","src/assets/stylesheets/utilities/_break.scss"],"names":[],"mappings":"AA2BA,cAGE,6BAKE,YAAA,CAGA,mDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CACA,mDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CAGA,gDAAA,CACA,gDAAA,CAGA,uCAAA,CACA,iCAAA,CACA,kCAAA,CACA,mCAAA,CACA,mCAAA,CACA,kCAAA,CACA,iCAAA,CACA,+CAAA,CACA,6DAAA,CACA,gEAAA,CACA,4DAAA,CACA,4DAAA,CACA,6DAAA,CAGA,6CAAA,CAGA,+CAAA,CAGA,2CAAA,CAGA,uDAAA,CACA,6DAAA,CACA,2DAAA,CAGA,yDAAA,CAGA,mDAAA,CACA,mDAAA,CAGA,qDAAA,CACA,wDAAA,CAGA,wEAAA,CAKA,yEAAA,CAKA,yECxDF,CD6DE,kHAEE,YC3DJ,CD+DE,gHAEE,eC7DJ,CDoFE,yDACE,4BClFJ,CDiFE,2DACE,4BC/EJ,CD8EE,gEACE,4BC5EJ,CD2EE,2DACE,4BCzEJ,CDwEE,yDACE,4BCtEJ,CDqEE,0DACE,4BCnEJ,CDkEE,gEACE,4BChEJ,CD+DE,0DACE,4BC7DJ,CD4DE,2OACE,4BCjDJ,CDwDA,+FAGE,iCCtDF,CACF,CCjDE,2BACE,4BAAA,CACA,oDAAA,CAOE,yBAAA,CACA,8CD6CN,CCvDE,4BACE,4BAAA,CACA,mDAAA,CAOE,yBAAA,CACA,8CDoDN,CC9DE,8BACE,4BAAA,CACA,qDAAA,CAOE,yBAAA,CACA,8CD2DN,CCrEE,mCACE,4BAAA,CACA,qDAAA,CAOE,yBAAA,CACA,8CDkEN,CC5EE,8BACE,4BAAA,CACA,qDAAA,CAOE,yBAAA,CACA,8CDyEN,CCnFE,4BACE,4BAAA,CACA,qDAAA,CAOE,yBAAA,CACA,8CDgFN,CC1FE,kCACE,4BAAA,CACA,oDAAA,CAOE,yBAAA,CACA,8CDuFN,CCjGE,4BACE,4BAAA,CACA,oDAAA,CAOE,yBAAA,CACA,8CD8FN,CCxGE,4BACE,4BAAA,CACA,oDAAA,CAOE,yBAAA,CACA,8CDqGN,CC/GE,6BACE,4BAAA,CACA,mDAAA,CAOE,yBAAA,CACA,8CD4GN,CCtHE,mCACE,4BAAA,CACA,oDAAA,CAOE,yBAAA,CACA,8CDmHN,CC7HE,4BACE,4BAAA,CACA,oDAAA,CAIE,oCAAA,CACA,2CD6HN,CCpIE,8BACE,4BAAA,CACA,oDAAA,CAIE,oCAAA,CACA,2CDoIN,CC3IE,6BACE,yBAAA,CACA,oDAAA,CAIE,oCAAA,CACA,2CD2IN,CClJE,8BACE,4BAAA,CACA,oDAAA,CAIE,oCAAA,CACA,2CDkJN,CCzJE,mCACE,4BAAA,CACA,qDAAA,CAOE,yBAAA,CACA,8CDsJN,CE3JE,4BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFwJN,CEnKE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFgKN,CE3KE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFwKN,CEnLE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFgLN,CE3LE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFwLN,CEnME,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFgMN,CE3ME,mCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFwMN,CEnNE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFgNN,CE3NE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFwNN,CEnOE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFgON,CE3OE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFwON,CEnPE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,qCAAA,CACA,4CFmPN,CE3PE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,qCAAA,CACA,4CF2PN,CEnQE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,qCAAA,CACA,4CFmQN,CE3QE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,qCAAA,CACA,4CF2QN,CEnRE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFgRN,CE3RE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CFwRN,CEnSE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CAAA,CAKA,4BF4RN,CE5SE,kCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,+CAAA,CAKA,4BFqSN,CEtRE,sEACE,4BFyRJ,CE1RE,+DACE,4BF6RJ,CE9RE,iEACE,4BFiSJ,CElSE,gEACE,4BFqSJ,CEtSE,iEACE,4BFySJ,CEhSA,8BACE,0BAAA,CACA,+CAAA,CACA,2CAAA,CACA,qCAAA,CACA,4CAAA,CAGA,4BFiSF,CGrMI,mCDtFA,+CACE,gCF8RJ,CE3RI,qDACE,gCF6RN,CExRE,iEACE,qBF0RJ,CACF,CGhNI,sCDnEA,uCACE,0CFsRJ,CACF,CE7QA,8BACE,0BAAA,CACA,4CAAA,CACA,gCAAA,CACA,0BAAA,CACA,+CAAA,CAGA,4BF8QF,CE3QE,yCACE,qBF6QJ,CG9MI,wCDxDA,8CACE,gCFyQJ,CACF,CGtOI,mCD5BA,+CACE,oCFqQJ,CElQI,qDACE,mCFoQN,CACF,CG3NI,wCDjCA,iFACE,qBF+PJ,CACF,CGnPI,sCDLA,uCACE,qBF2PJ,CACF","file":"palette.css"}
|
1
docs/assets/stylesheets/palette.ecc896b0.min.css
vendored
Normal file
1
docs/assets/stylesheets/palette.ecc896b0.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
docs/assets/stylesheets/palette.ecc896b0.min.css.map
Normal file
1
docs/assets/stylesheets/palette.ecc896b0.min.css.map
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"sources":["src/assets/stylesheets/palette/_scheme.scss","../../../src/assets/stylesheets/palette.scss","src/assets/stylesheets/palette/_accent.scss","src/assets/stylesheets/palette/_primary.scss","src/assets/stylesheets/utilities/_break.scss"],"names":[],"mappings":"AA2BA,cAGE,6BAQE,YAAA,CAGA,mDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CACA,mDAAA,CACA,6DAAA,CACA,+DAAA,CACA,gEAAA,CAGA,gDAAA,CACA,gDAAA,CAGA,4BAAA,CACA,iCAAA,CACA,kCAAA,CACA,mCAAA,CACA,mCAAA,CACA,kCAAA,CACA,iCAAA,CACA,+CAAA,CACA,6DAAA,CACA,gEAAA,CACA,4DAAA,CACA,4DAAA,CACA,6DAAA,CAGA,6CAAA,CAGA,+CAAA,CAGA,iCAAA,CAGA,uDAAA,CACA,6DAAA,CACA,2DAAA,CAGA,yDAAA,CACA,iEAAA,CAGA,mDAAA,CACA,mDAAA,CAGA,qDAAA,CACA,wDAAA,CAGA,0DAAA,CAKA,8DAAA,CAKA,0DAAA,CAzEA,iBCeF,CD+DE,kHAEE,YC7DJ,CDoFE,yDACE,4BClFJ,CDiFE,2DACE,4BC/EJ,CD8EE,gEACE,4BC5EJ,CD2EE,2DACE,4BCzEJ,CDwEE,yDACE,4BCtEJ,CDqEE,0DACE,4BCnEJ,CDkEE,gEACE,4BChEJ,CD+DE,0DACE,4BC7DJ,CD4DE,2OACE,4BCjDJ,CDwDA,+FAGE,iCCtDF,CACF,CC/CE,2BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD2CN,CCrDE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDkDN,CC5DE,8BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDyDN,CCnEE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDgEN,CC1EE,8BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDuEN,CCjFE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD8EN,CCxFE,kCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDqFN,CC/FE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD4FN,CCtGE,4BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDmGN,CC7GE,6BACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCD0GN,CCpHE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDiHN,CC3HE,4BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCD2HN,CClIE,8BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDkIN,CCzIE,6BACE,yBAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDyIN,CChJE,8BACE,4BAAA,CACA,2CAAA,CAIE,8BAAA,CACA,qCDgJN,CCvJE,mCACE,4BAAA,CACA,2CAAA,CAOE,yBAAA,CACA,qCDoJN,CEzJE,4BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsJN,CEjKE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8JN,CEzKE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsKN,CEjLE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8KN,CEzLE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsLN,CEjME,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8LN,CEzME,mCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsMN,CEjNE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8MN,CEzNE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsNN,CEjOE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8NN,CEzOE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsON,CEjPE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFiPN,CEzPE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFyPN,CEjQE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFiQN,CEzQE,+BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAIE,+BAAA,CACA,sCFyQN,CEjRE,oCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCF8QN,CEzRE,8BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCFsRN,CEjSE,6BACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCAAA,CAKA,4BF0RN,CE1SE,kCACE,6BAAA,CACA,oCAAA,CACA,mCAAA,CAOE,0BAAA,CACA,sCAAA,CAKA,4BFmSN,CEpRE,sEACE,4BFuRJ,CExRE,+DACE,4BF2RJ,CE5RE,iEACE,4BF+RJ,CEhSE,gEACE,4BFmSJ,CEpSE,iEACE,4BFuSJ,CE9RA,8BACE,0BAAA,CACA,sCAAA,CACA,qCAAA,CACA,+BAAA,CACA,sCAAA,CAGA,4BF+RF,CE5RE,yCACE,+BF8RJ,CE3RI,kDAEE,0CAAA,CACA,sCAAA,CAFA,UF+RN,CG3MI,mCD1EA,+CACE,0BFwRJ,CErRI,qDACE,0BFuRN,CElRE,iEACE,eFoRJ,CACF,CGtNI,sCDvDA,uCACE,oCFgRJ,CACF,CEvQA,8BACE,0BAAA,CACA,sCAAA,CACA,gCAAA,CACA,0BAAA,CACA,sCAAA,CAGA,4BFwQF,CErQE,yCACE,+BFuQJ,CEpQI,kDAEE,0CAAA,CACA,sCAAA,CAFA,UFwQN,CEjQE,yCACE,qBFmQJ,CG5NI,wCDhCA,8CACE,0BF+PJ,CACF,CGpPI,mCDJA,+CACE,0BF2PJ,CExPI,qDACE,0BF0PN,CACF,CGzOI,wCDTA,iFACE,qBFqPJ,CACF,CGjQI,sCDmBA,uCACE,qBFiPJ,CACF","file":"palette.css"}
|
@ -57,8 +57,7 @@ proc main() {.async.} =
|
||||
let
|
||||
# Create a relay address to swDst using swRel as the relay
|
||||
addrs = MultiAddress.init($swRel.peerInfo.addrs[0] & "/p2p/" &
|
||||
$swRel.peerInfo.peerId & "/p2p-circuit/p2p/" &
|
||||
$swDst.peerInfo.peerId).get()
|
||||
$swRel.peerInfo.peerId & "/p2p-circuit").get()
|
||||
|
||||
# Connect Dst to the relay
|
||||
await swDst.connect(swRel.peerInfo.peerId, swRel.peerInfo.addrs)
|
||||
|
@ -10,8 +10,12 @@
|
||||
|
||||
<link rel="canonical" href="https://status-im.github.io/nim-libp2p/docs/circuitrelay/">
|
||||
|
||||
<link rel="icon" href="https://docs.libp2p.io/images/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.1, mkdocs-material-8.5.7">
|
||||
|
||||
<link rel="prev" href="../tutorial_6_game/">
|
||||
|
||||
|
||||
<link rel="icon" href="https://libp2p.io/img/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.15">
|
||||
|
||||
|
||||
|
||||
@ -19,11 +23,10 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.20d9efc8.min.css">
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.26e3688c.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/palette.cbb835fc.min.css">
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/palette.ecc896b0.min.css">
|
||||
|
||||
|
||||
|
||||
@ -56,7 +59,7 @@
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="">
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
|
||||
@ -80,11 +83,13 @@
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
|
||||
|
||||
<header class="md-header md-header--shadow" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href=".." title="nim-libp2p" class="md-header__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
@ -107,27 +112,31 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
</form>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -157,7 +166,7 @@
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list"></ol>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -169,7 +178,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -203,7 +212,7 @@
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href=".." title="nim-libp2p" class="md-nav__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
nim-libp2p
|
||||
@ -213,7 +222,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -236,17 +245,18 @@
|
||||
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_1" type="checkbox" id="__nav_1" checked>
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" checked>
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_1">
|
||||
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
|
||||
Tutorials
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" aria-label="Tutorials" data-md-level="1">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_1">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Tutorials
|
||||
@ -360,7 +370,7 @@
|
||||
|
||||
<li class="md-nav__item md-nav__item--active">
|
||||
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
|
||||
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
||||
|
||||
|
||||
|
||||
@ -434,82 +444,81 @@
|
||||
directly, but can reach it through a another node (the Relay).</p>
|
||||
<p>That may happen because of NAT, Firewalls, or incompatible transports.</p>
|
||||
<p>More informations <a href="https://docs.libp2p.io/concepts/circuit-relay/">here</a>.</p>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kn">import</span> <span class="n">chronos</span><span class="p">,</span> <span class="n">stew</span><span class="o">/</span><span class="n">byteutils</span>
|
||||
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">import</span> <span class="n">libp2p</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a> <span class="n">libp2p</span><span class="o">/</span><span class="n">protocols</span><span class="o">/</span><span class="n">connectivity</span><span class="o">/</span><span class="n">relay</span><span class="o">/[</span><span class="n">relay</span><span class="p">,</span> <span class="n">client</span><span class="o">]</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kn">import</span><span class="w"> </span><span class="n">chronos</span><span class="p">,</span><span class="w"> </span><span class="n">stew</span><span class="o">/</span><span class="n">byteutils</span>
|
||||
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">import</span><span class="w"> </span><span class="n">libp2p</span><span class="p">,</span>
|
||||
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="w"> </span><span class="n">libp2p</span><span class="o">/</span><span class="n">protocols</span><span class="o">/</span><span class="n">connectivity</span><span class="o">/</span><span class="n">relay</span><span class="o">/[</span><span class="n">relay</span><span class="p">,</span><span class="w"> </span><span class="n">client</span><span class="o">]</span>
|
||||
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a>
|
||||
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="c"># Helper to create a circuit relay node</span>
|
||||
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="k">proc </span><span class="nf">createCircuitRelaySwitch</span><span class="p">(</span><span class="n">r</span><span class="p">:</span> <span class="n">Relay</span><span class="p">):</span> <span class="n">Switch</span> <span class="o">=</span>
|
||||
<a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a> <span class="n">SwitchBuilder</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a> <span class="p">.</span><span class="n">withRng</span><span class="p">(</span><span class="n">newRng</span><span class="p">())</span>
|
||||
<a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a> <span class="p">.</span><span class="n">withAddresses</span><span class="p">(</span><span class="o">@[</span> <span class="n">MultiAddress</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="s">"/ip4/0.0.0.0/tcp/0"</span><span class="p">).</span><span class="n">tryGet</span><span class="p">()</span> <span class="o">]</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a> <span class="p">.</span><span class="n">withTcpTransport</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a> <span class="p">.</span><span class="n">withMplex</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a> <span class="p">.</span><span class="n">withNoise</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a> <span class="p">.</span><span class="n">withCircuitRelay</span><span class="p">(</span><span class="n">r</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a> <span class="p">.</span><span class="n">build</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="k">proc</span><span class="w"> </span><span class="nf">createCircuitRelaySwitch</span><span class="p">(</span><span class="n">r</span><span class="p">:</span><span class="w"> </span><span class="n">Relay</span><span class="p">):</span><span class="w"> </span><span class="n">Switch</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="w"> </span><span class="n">SwitchBuilder</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="w"> </span><span class="p">.</span><span class="n">withRng</span><span class="p">(</span><span class="n">newRng</span><span class="p">())</span>
|
||||
<a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a><span class="w"> </span><span class="p">.</span><span class="n">withAddresses</span><span class="p">(</span><span class="o">@[</span><span class="w"> </span><span class="n">MultiAddress</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="s">"/ip4/0.0.0.0/tcp/0"</span><span class="p">).</span><span class="n">tryGet</span><span class="p">()</span><span class="w"> </span><span class="o">]</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a><span class="w"> </span><span class="p">.</span><span class="n">withTcpTransport</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a><span class="w"> </span><span class="p">.</span><span class="n">withMplex</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a><span class="w"> </span><span class="p">.</span><span class="n">withNoise</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a><span class="w"> </span><span class="p">.</span><span class="n">withCircuitRelay</span><span class="p">(</span><span class="n">r</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a><span class="w"> </span><span class="p">.</span><span class="n">build</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-15" name="__codelineno-0-15" href="#__codelineno-0-15"></a>
|
||||
<a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a><span class="k">proc </span><span class="nf">main</span><span class="p">()</span> <span class="p">{.</span><span class="n">async</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-0-17" name="__codelineno-0-17" href="#__codelineno-0-17"></a> <span class="c"># Create a custom protocol</span>
|
||||
<a id="__codelineno-0-18" name="__codelineno-0-18" href="#__codelineno-0-18"></a> <span class="k">let</span> <span class="n">customProtoCodec</span> <span class="o">=</span> <span class="s">"/test"</span>
|
||||
<a id="__codelineno-0-19" name="__codelineno-0-19" href="#__codelineno-0-19"></a> <span class="kd">var</span> <span class="n">proto</span> <span class="o">=</span> <span class="n">new</span> <span class="n">LPProtocol</span>
|
||||
<a id="__codelineno-0-20" name="__codelineno-0-20" href="#__codelineno-0-20"></a> <span class="n">proto</span><span class="p">.</span><span class="n">codec</span> <span class="o">=</span> <span class="n">customProtoCodec</span>
|
||||
<a id="__codelineno-0-21" name="__codelineno-0-21" href="#__codelineno-0-21"></a> <span class="n">proto</span><span class="p">.</span><span class="n">handler</span> <span class="o">=</span> <span class="k">proc</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span> <span class="n">Connection</span><span class="p">,</span> <span class="n">proto</span><span class="p">:</span> <span class="nb">string</span><span class="p">)</span> <span class="p">{.</span><span class="n">async</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-0-22" name="__codelineno-0-22" href="#__codelineno-0-22"></a> <span class="kd">var</span> <span class="n">msg</span> <span class="o">=</span> <span class="nb">string</span><span class="p">.</span><span class="n">fromBytes</span><span class="p">(</span><span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">1024</span><span class="p">))</span>
|
||||
<a id="__codelineno-0-23" name="__codelineno-0-23" href="#__codelineno-0-23"></a> <span class="n">echo</span> <span class="s">"1 - Dst Received: "</span><span class="p">,</span> <span class="n">msg</span>
|
||||
<a id="__codelineno-0-24" name="__codelineno-0-24" href="#__codelineno-0-24"></a> <span class="n">assert</span> <span class="s">"test1"</span> <span class="o">==</span> <span class="n">msg</span>
|
||||
<a id="__codelineno-0-25" name="__codelineno-0-25" href="#__codelineno-0-25"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="s">"test2"</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-26" name="__codelineno-0-26" href="#__codelineno-0-26"></a> <span class="n">msg</span> <span class="o">=</span> <span class="nb">string</span><span class="p">.</span><span class="n">fromBytes</span><span class="p">(</span><span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">1024</span><span class="p">))</span>
|
||||
<a id="__codelineno-0-27" name="__codelineno-0-27" href="#__codelineno-0-27"></a> <span class="n">echo</span> <span class="s">"2 - Dst Received: "</span><span class="p">,</span> <span class="n">msg</span>
|
||||
<a id="__codelineno-0-28" name="__codelineno-0-28" href="#__codelineno-0-28"></a> <span class="n">assert</span> <span class="s">"test3"</span> <span class="o">==</span> <span class="n">msg</span>
|
||||
<a id="__codelineno-0-29" name="__codelineno-0-29" href="#__codelineno-0-29"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="s">"test4"</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a><span class="k">proc</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="sx">{.async.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-0-17" name="__codelineno-0-17" href="#__codelineno-0-17"></a><span class="w"> </span><span class="c"># Create a custom protocol</span>
|
||||
<a id="__codelineno-0-18" name="__codelineno-0-18" href="#__codelineno-0-18"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">customProtoCodec</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"/test"</span>
|
||||
<a id="__codelineno-0-19" name="__codelineno-0-19" href="#__codelineno-0-19"></a><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="n">proto</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">LPProtocol</span>
|
||||
<a id="__codelineno-0-20" name="__codelineno-0-20" href="#__codelineno-0-20"></a><span class="w"> </span><span class="n">proto</span><span class="p">.</span><span class="n">codec</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">customProtoCodec</span>
|
||||
<a id="__codelineno-0-21" name="__codelineno-0-21" href="#__codelineno-0-21"></a><span class="w"> </span><span class="n">proto</span><span class="p">.</span><span class="n">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">proc</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span><span class="w"> </span><span class="n">Connection</span><span class="p">,</span><span class="w"> </span><span class="n">proto</span><span class="p">:</span><span class="w"> </span><span class="nb">string</span><span class="p">)</span><span class="w"> </span><span class="sx">{.async.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-0-22" name="__codelineno-0-22" href="#__codelineno-0-22"></a><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="n">msg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">string</span><span class="p">.</span><span class="n">fromBytes</span><span class="p">(</span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">1024</span><span class="p">))</span>
|
||||
<a id="__codelineno-0-23" name="__codelineno-0-23" href="#__codelineno-0-23"></a><span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="s">"1 - Dst Received: "</span><span class="p">,</span><span class="w"> </span><span class="n">msg</span>
|
||||
<a id="__codelineno-0-24" name="__codelineno-0-24" href="#__codelineno-0-24"></a><span class="w"> </span><span class="n">assert</span><span class="w"> </span><span class="s">"test1"</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">msg</span>
|
||||
<a id="__codelineno-0-25" name="__codelineno-0-25" href="#__codelineno-0-25"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="s">"test2"</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-26" name="__codelineno-0-26" href="#__codelineno-0-26"></a><span class="w"> </span><span class="n">msg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">string</span><span class="p">.</span><span class="n">fromBytes</span><span class="p">(</span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">1024</span><span class="p">))</span>
|
||||
<a id="__codelineno-0-27" name="__codelineno-0-27" href="#__codelineno-0-27"></a><span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="s">"2 - Dst Received: "</span><span class="p">,</span><span class="w"> </span><span class="n">msg</span>
|
||||
<a id="__codelineno-0-28" name="__codelineno-0-28" href="#__codelineno-0-28"></a><span class="w"> </span><span class="n">assert</span><span class="w"> </span><span class="s">"test3"</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">msg</span>
|
||||
<a id="__codelineno-0-29" name="__codelineno-0-29" href="#__codelineno-0-29"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="s">"test4"</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-30" name="__codelineno-0-30" href="#__codelineno-0-30"></a>
|
||||
<a id="__codelineno-0-31" name="__codelineno-0-31" href="#__codelineno-0-31"></a> <span class="k">let</span>
|
||||
<a id="__codelineno-0-32" name="__codelineno-0-32" href="#__codelineno-0-32"></a> <span class="n">relay</span> <span class="o">=</span> <span class="n">Relay</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-33" name="__codelineno-0-33" href="#__codelineno-0-33"></a> <span class="n">clSrc</span> <span class="o">=</span> <span class="n">RelayClient</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-34" name="__codelineno-0-34" href="#__codelineno-0-34"></a> <span class="n">clDst</span> <span class="o">=</span> <span class="n">RelayClient</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-31" name="__codelineno-0-31" href="#__codelineno-0-31"></a><span class="w"> </span><span class="k">let</span>
|
||||
<a id="__codelineno-0-32" name="__codelineno-0-32" href="#__codelineno-0-32"></a><span class="w"> </span><span class="n">relay</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Relay</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-33" name="__codelineno-0-33" href="#__codelineno-0-33"></a><span class="w"> </span><span class="n">clSrc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RelayClient</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-34" name="__codelineno-0-34" href="#__codelineno-0-34"></a><span class="w"> </span><span class="n">clDst</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RelayClient</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-35" name="__codelineno-0-35" href="#__codelineno-0-35"></a>
|
||||
<a id="__codelineno-0-36" name="__codelineno-0-36" href="#__codelineno-0-36"></a> <span class="c"># Create three hosts, enable relay client on two of them.</span>
|
||||
<a id="__codelineno-0-37" name="__codelineno-0-37" href="#__codelineno-0-37"></a> <span class="c"># The third one can relay connections for other peers.</span>
|
||||
<a id="__codelineno-0-38" name="__codelineno-0-38" href="#__codelineno-0-38"></a> <span class="c"># RelayClient can use a relay, Relay is a relay.</span>
|
||||
<a id="__codelineno-0-39" name="__codelineno-0-39" href="#__codelineno-0-39"></a> <span class="n">swRel</span> <span class="o">=</span> <span class="n">createCircuitRelaySwitch</span><span class="p">(</span><span class="n">relay</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-40" name="__codelineno-0-40" href="#__codelineno-0-40"></a> <span class="n">swSrc</span> <span class="o">=</span> <span class="n">createCircuitRelaySwitch</span><span class="p">(</span><span class="n">clSrc</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-41" name="__codelineno-0-41" href="#__codelineno-0-41"></a> <span class="n">swDst</span> <span class="o">=</span> <span class="n">createCircuitRelaySwitch</span><span class="p">(</span><span class="n">clDst</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-36" name="__codelineno-0-36" href="#__codelineno-0-36"></a><span class="w"> </span><span class="c"># Create three hosts, enable relay client on two of them.</span>
|
||||
<a id="__codelineno-0-37" name="__codelineno-0-37" href="#__codelineno-0-37"></a><span class="w"> </span><span class="c"># The third one can relay connections for other peers.</span>
|
||||
<a id="__codelineno-0-38" name="__codelineno-0-38" href="#__codelineno-0-38"></a><span class="w"> </span><span class="c"># RelayClient can use a relay, Relay is a relay.</span>
|
||||
<a id="__codelineno-0-39" name="__codelineno-0-39" href="#__codelineno-0-39"></a><span class="w"> </span><span class="n">swRel</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">createCircuitRelaySwitch</span><span class="p">(</span><span class="n">relay</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-40" name="__codelineno-0-40" href="#__codelineno-0-40"></a><span class="w"> </span><span class="n">swSrc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">createCircuitRelaySwitch</span><span class="p">(</span><span class="n">clSrc</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-41" name="__codelineno-0-41" href="#__codelineno-0-41"></a><span class="w"> </span><span class="n">swDst</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">createCircuitRelaySwitch</span><span class="p">(</span><span class="n">clDst</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-42" name="__codelineno-0-42" href="#__codelineno-0-42"></a>
|
||||
<a id="__codelineno-0-43" name="__codelineno-0-43" href="#__codelineno-0-43"></a> <span class="n">swDst</span><span class="p">.</span><span class="n">mount</span><span class="p">(</span><span class="n">proto</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-43" name="__codelineno-0-43" href="#__codelineno-0-43"></a><span class="w"> </span><span class="n">swDst</span><span class="p">.</span><span class="n">mount</span><span class="p">(</span><span class="n">proto</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-44" name="__codelineno-0-44" href="#__codelineno-0-44"></a>
|
||||
<a id="__codelineno-0-45" name="__codelineno-0-45" href="#__codelineno-0-45"></a> <span class="n">await</span> <span class="n">swRel</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-46" name="__codelineno-0-46" href="#__codelineno-0-46"></a> <span class="n">await</span> <span class="n">swSrc</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-47" name="__codelineno-0-47" href="#__codelineno-0-47"></a> <span class="n">await</span> <span class="n">swDst</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-45" name="__codelineno-0-45" href="#__codelineno-0-45"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">swRel</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-46" name="__codelineno-0-46" href="#__codelineno-0-46"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">swSrc</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-47" name="__codelineno-0-47" href="#__codelineno-0-47"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">swDst</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-48" name="__codelineno-0-48" href="#__codelineno-0-48"></a>
|
||||
<a id="__codelineno-0-49" name="__codelineno-0-49" href="#__codelineno-0-49"></a> <span class="k">let</span>
|
||||
<a id="__codelineno-0-50" name="__codelineno-0-50" href="#__codelineno-0-50"></a> <span class="c"># Create a relay address to swDst using swRel as the relay</span>
|
||||
<a id="__codelineno-0-51" name="__codelineno-0-51" href="#__codelineno-0-51"></a> <span class="n">addrs</span> <span class="o">=</span> <span class="n">MultiAddress</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="o">$</span><span class="n">swRel</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">addrs</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span> <span class="o">&</span> <span class="s">"/p2p/"</span> <span class="o">&</span>
|
||||
<a id="__codelineno-0-52" name="__codelineno-0-52" href="#__codelineno-0-52"></a> <span class="o">$</span><span class="n">swRel</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span> <span class="o">&</span> <span class="s">"/p2p-circuit/p2p/"</span> <span class="o">&</span>
|
||||
<a id="__codelineno-0-53" name="__codelineno-0-53" href="#__codelineno-0-53"></a> <span class="o">$</span><span class="n">swDst</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">).</span><span class="n">get</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-54" name="__codelineno-0-54" href="#__codelineno-0-54"></a>
|
||||
<a id="__codelineno-0-55" name="__codelineno-0-55" href="#__codelineno-0-55"></a> <span class="c"># Connect Dst to the relay</span>
|
||||
<a id="__codelineno-0-56" name="__codelineno-0-56" href="#__codelineno-0-56"></a> <span class="n">await</span> <span class="n">swDst</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">swRel</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">,</span> <span class="n">swRel</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">addrs</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-57" name="__codelineno-0-57" href="#__codelineno-0-57"></a>
|
||||
<a id="__codelineno-0-58" name="__codelineno-0-58" href="#__codelineno-0-58"></a> <span class="c"># Dst reserve a slot on the relay.</span>
|
||||
<a id="__codelineno-0-59" name="__codelineno-0-59" href="#__codelineno-0-59"></a> <span class="k">let</span> <span class="n">rsvp</span> <span class="o">=</span> <span class="n">await</span> <span class="n">clDst</span><span class="p">.</span><span class="n">reserve</span><span class="p">(</span><span class="n">swRel</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">,</span> <span class="n">swRel</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">addrs</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-60" name="__codelineno-0-60" href="#__codelineno-0-60"></a>
|
||||
<a id="__codelineno-0-61" name="__codelineno-0-61" href="#__codelineno-0-61"></a> <span class="c"># Src dial Dst using the relay</span>
|
||||
<a id="__codelineno-0-62" name="__codelineno-0-62" href="#__codelineno-0-62"></a> <span class="k">let</span> <span class="n">conn</span> <span class="o">=</span> <span class="n">await</span> <span class="n">swSrc</span><span class="p">.</span><span class="n">dial</span><span class="p">(</span><span class="n">swDst</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">,</span> <span class="o">@[</span> <span class="n">addrs</span> <span class="o">]</span><span class="p">,</span> <span class="n">customProtoCodec</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-63" name="__codelineno-0-63" href="#__codelineno-0-63"></a>
|
||||
<a id="__codelineno-0-64" name="__codelineno-0-64" href="#__codelineno-0-64"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="s">"test1"</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-65" name="__codelineno-0-65" href="#__codelineno-0-65"></a> <span class="kd">var</span> <span class="n">msg</span> <span class="o">=</span> <span class="nb">string</span><span class="p">.</span><span class="n">fromBytes</span><span class="p">(</span><span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">1024</span><span class="p">))</span>
|
||||
<a id="__codelineno-0-66" name="__codelineno-0-66" href="#__codelineno-0-66"></a> <span class="n">echo</span> <span class="s">"1 - Src Received: "</span><span class="p">,</span> <span class="n">msg</span>
|
||||
<a id="__codelineno-0-67" name="__codelineno-0-67" href="#__codelineno-0-67"></a> <span class="n">assert</span> <span class="s">"test2"</span> <span class="o">==</span> <span class="n">msg</span>
|
||||
<a id="__codelineno-0-68" name="__codelineno-0-68" href="#__codelineno-0-68"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="s">"test3"</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-69" name="__codelineno-0-69" href="#__codelineno-0-69"></a> <span class="n">msg</span> <span class="o">=</span> <span class="nb">string</span><span class="p">.</span><span class="n">fromBytes</span><span class="p">(</span><span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">1024</span><span class="p">))</span>
|
||||
<a id="__codelineno-0-70" name="__codelineno-0-70" href="#__codelineno-0-70"></a> <span class="n">echo</span> <span class="s">"2 - Src Received: "</span><span class="p">,</span> <span class="n">msg</span>
|
||||
<a id="__codelineno-0-71" name="__codelineno-0-71" href="#__codelineno-0-71"></a> <span class="n">assert</span> <span class="s">"test4"</span> <span class="o">==</span> <span class="n">msg</span>
|
||||
<a id="__codelineno-0-72" name="__codelineno-0-72" href="#__codelineno-0-72"></a>
|
||||
<a id="__codelineno-0-73" name="__codelineno-0-73" href="#__codelineno-0-73"></a> <span class="n">await</span> <span class="n">relay</span><span class="p">.</span><span class="n">stop</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-74" name="__codelineno-0-74" href="#__codelineno-0-74"></a> <span class="n">await</span> <span class="n">allFutures</span><span class="p">(</span><span class="n">swSrc</span><span class="p">.</span><span class="n">stop</span><span class="p">(),</span> <span class="n">swDst</span><span class="p">.</span><span class="n">stop</span><span class="p">(),</span> <span class="n">swRel</span><span class="p">.</span><span class="n">stop</span><span class="p">())</span>
|
||||
<a id="__codelineno-0-75" name="__codelineno-0-75" href="#__codelineno-0-75"></a>
|
||||
<a id="__codelineno-0-76" name="__codelineno-0-76" href="#__codelineno-0-76"></a><span class="n">waitFor</span><span class="p">(</span><span class="n">main</span><span class="p">())</span>
|
||||
<a id="__codelineno-0-49" name="__codelineno-0-49" href="#__codelineno-0-49"></a><span class="w"> </span><span class="k">let</span>
|
||||
<a id="__codelineno-0-50" name="__codelineno-0-50" href="#__codelineno-0-50"></a><span class="w"> </span><span class="c"># Create a relay address to swDst using swRel as the relay</span>
|
||||
<a id="__codelineno-0-51" name="__codelineno-0-51" href="#__codelineno-0-51"></a><span class="w"> </span><span class="n">addrs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MultiAddress</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="o">$</span><span class="n">swRel</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">addrs</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="s">"/p2p/"</span><span class="w"> </span><span class="o">&</span>
|
||||
<a id="__codelineno-0-52" name="__codelineno-0-52" href="#__codelineno-0-52"></a><span class="w"> </span><span class="o">$</span><span class="n">swRel</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="s">"/p2p-circuit"</span><span class="p">).</span><span class="n">get</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-53" name="__codelineno-0-53" href="#__codelineno-0-53"></a>
|
||||
<a id="__codelineno-0-54" name="__codelineno-0-54" href="#__codelineno-0-54"></a><span class="w"> </span><span class="c"># Connect Dst to the relay</span>
|
||||
<a id="__codelineno-0-55" name="__codelineno-0-55" href="#__codelineno-0-55"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">swDst</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">swRel</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">,</span><span class="w"> </span><span class="n">swRel</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">addrs</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-56" name="__codelineno-0-56" href="#__codelineno-0-56"></a>
|
||||
<a id="__codelineno-0-57" name="__codelineno-0-57" href="#__codelineno-0-57"></a><span class="w"> </span><span class="c"># Dst reserve a slot on the relay.</span>
|
||||
<a id="__codelineno-0-58" name="__codelineno-0-58" href="#__codelineno-0-58"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">rsvp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">clDst</span><span class="p">.</span><span class="n">reserve</span><span class="p">(</span><span class="n">swRel</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">,</span><span class="w"> </span><span class="n">swRel</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">addrs</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-59" name="__codelineno-0-59" href="#__codelineno-0-59"></a>
|
||||
<a id="__codelineno-0-60" name="__codelineno-0-60" href="#__codelineno-0-60"></a><span class="w"> </span><span class="c"># Src dial Dst using the relay</span>
|
||||
<a id="__codelineno-0-61" name="__codelineno-0-61" href="#__codelineno-0-61"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">conn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">swSrc</span><span class="p">.</span><span class="n">dial</span><span class="p">(</span><span class="n">swDst</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">,</span><span class="w"> </span><span class="o">@[</span><span class="w"> </span><span class="n">addrs</span><span class="w"> </span><span class="o">]</span><span class="p">,</span><span class="w"> </span><span class="n">customProtoCodec</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-62" name="__codelineno-0-62" href="#__codelineno-0-62"></a>
|
||||
<a id="__codelineno-0-63" name="__codelineno-0-63" href="#__codelineno-0-63"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="s">"test1"</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-64" name="__codelineno-0-64" href="#__codelineno-0-64"></a><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="n">msg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">string</span><span class="p">.</span><span class="n">fromBytes</span><span class="p">(</span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">1024</span><span class="p">))</span>
|
||||
<a id="__codelineno-0-65" name="__codelineno-0-65" href="#__codelineno-0-65"></a><span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="s">"1 - Src Received: "</span><span class="p">,</span><span class="w"> </span><span class="n">msg</span>
|
||||
<a id="__codelineno-0-66" name="__codelineno-0-66" href="#__codelineno-0-66"></a><span class="w"> </span><span class="n">assert</span><span class="w"> </span><span class="s">"test2"</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">msg</span>
|
||||
<a id="__codelineno-0-67" name="__codelineno-0-67" href="#__codelineno-0-67"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="s">"test3"</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-68" name="__codelineno-0-68" href="#__codelineno-0-68"></a><span class="w"> </span><span class="n">msg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">string</span><span class="p">.</span><span class="n">fromBytes</span><span class="p">(</span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">1024</span><span class="p">))</span>
|
||||
<a id="__codelineno-0-69" name="__codelineno-0-69" href="#__codelineno-0-69"></a><span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="s">"2 - Src Received: "</span><span class="p">,</span><span class="w"> </span><span class="n">msg</span>
|
||||
<a id="__codelineno-0-70" name="__codelineno-0-70" href="#__codelineno-0-70"></a><span class="w"> </span><span class="n">assert</span><span class="w"> </span><span class="s">"test4"</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">msg</span>
|
||||
<a id="__codelineno-0-71" name="__codelineno-0-71" href="#__codelineno-0-71"></a>
|
||||
<a id="__codelineno-0-72" name="__codelineno-0-72" href="#__codelineno-0-72"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">relay</span><span class="p">.</span><span class="n">stop</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-73" name="__codelineno-0-73" href="#__codelineno-0-73"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">allFutures</span><span class="p">(</span><span class="n">swSrc</span><span class="p">.</span><span class="n">stop</span><span class="p">(),</span><span class="w"> </span><span class="n">swDst</span><span class="p">.</span><span class="n">stop</span><span class="p">(),</span><span class="w"> </span><span class="n">swRel</span><span class="p">.</span><span class="n">stop</span><span class="p">())</span>
|
||||
<a id="__codelineno-0-74" name="__codelineno-0-74" href="#__codelineno-0-74"></a>
|
||||
<a id="__codelineno-0-75" name="__codelineno-0-75" href="#__codelineno-0-75"></a><span class="n">waitFor</span><span class="p">(</span><span class="n">main</span><span class="p">())</span>
|
||||
</code></pre></div>
|
||||
|
||||
|
||||
@ -527,27 +536,6 @@ directly, but can reach it through a another node (the Relay).</p>
|
||||
|
||||
<footer class="md-footer">
|
||||
|
||||
|
||||
<nav class="md-footer__inner md-grid" aria-label="Footer" >
|
||||
|
||||
|
||||
<a href="../tutorial_6_game/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Game" rel="prev">
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
||||
</div>
|
||||
<div class="md-footer__title">
|
||||
<div class="md-ellipsis">
|
||||
<span class="md-footer__direction">
|
||||
Previous
|
||||
</span>
|
||||
Game
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
</nav>
|
||||
|
||||
<div class="md-footer-meta md-typeset">
|
||||
<div class="md-footer-meta__inner md-grid">
|
||||
<div class="md-copyright">
|
||||
@ -569,10 +557,10 @@ directly, but can reach it through a another node (the Relay).</p>
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.instant", "search.highlight"], "search": "../assets/javascripts/workers/search.16e2a7d4.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script>
|
||||
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.instant", "search.highlight"], "search": "../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.8492ddcf.min.js"></script>
|
||||
<script src="../assets/javascripts/bundle.b4d07000.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
@ -10,8 +10,10 @@
|
||||
|
||||
<link rel="canonical" href="https://status-im.github.io/nim-libp2p/docs/go-daemon/daemonapi/">
|
||||
|
||||
<link rel="icon" href="https://docs.libp2p.io/images/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.1, mkdocs-material-8.5.7">
|
||||
|
||||
|
||||
<link rel="icon" href="https://libp2p.io/img/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.15">
|
||||
|
||||
|
||||
|
||||
@ -19,11 +21,10 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../../assets/stylesheets/main.20d9efc8.min.css">
|
||||
<link rel="stylesheet" href="../../assets/stylesheets/main.26e3688c.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../../assets/stylesheets/palette.cbb835fc.min.css">
|
||||
|
||||
<link rel="stylesheet" href="../../assets/stylesheets/palette.ecc896b0.min.css">
|
||||
|
||||
|
||||
|
||||
@ -56,7 +57,7 @@
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="">
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
|
||||
@ -80,11 +81,13 @@
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
|
||||
|
||||
<header class="md-header md-header--shadow" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href="../.." title="nim-libp2p" class="md-header__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
@ -107,27 +110,31 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
</form>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -157,7 +164,7 @@
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list"></ol>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -169,7 +176,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -203,7 +210,7 @@
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href="../.." title="nim-libp2p" class="md-nav__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
nim-libp2p
|
||||
@ -213,7 +220,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -234,17 +241,18 @@
|
||||
<li class="md-nav__item md-nav__item--nested">
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_1" type="checkbox" id="__nav_1" >
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" >
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_1">
|
||||
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
|
||||
Tutorials
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" aria-label="Tutorials" data-md-level="1">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_1">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Tutorials
|
||||
@ -430,32 +438,32 @@
|
||||
For more information about the go daemon, check out <a href="https://github.com/libp2p/go-libp2p-daemon">this repository</a>.</p>
|
||||
<h1 id="installation">Installation</h1>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="c1"># clone and install dependencies</span>
|
||||
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>git clone https://github.com/status-im/nim-libp2p
|
||||
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="nb">cd</span> nim-libp2p
|
||||
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a>nimble install
|
||||
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/status-im/nim-libp2p
|
||||
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="nb">cd</span><span class="w"> </span>nim-libp2p
|
||||
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a>nimble<span class="w"> </span>install
|
||||
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a>
|
||||
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="c1"># perform unit tests</span>
|
||||
<a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a>nimble <span class="nb">test</span>
|
||||
<a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a>nimble<span class="w"> </span><span class="nb">test</span>
|
||||
<a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a>
|
||||
<a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a><span class="c1"># update the git submodule to install the go daemon </span>
|
||||
<a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a>git submodule update --init --recursive
|
||||
<a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a>go version
|
||||
<a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a>git clone https://github.com/libp2p/go-libp2p-daemon
|
||||
<a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a><span class="nb">cd</span> go-libp2p-daemon
|
||||
<a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a>git checkout v0.0.1
|
||||
<a id="__codelineno-0-15" name="__codelineno-0-15" href="#__codelineno-0-15"></a>go install ./...
|
||||
<a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a><span class="nb">cd</span> ..
|
||||
<a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a>git<span class="w"> </span>submodule<span class="w"> </span>update<span class="w"> </span>--init<span class="w"> </span>--recursive
|
||||
<a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a>go<span class="w"> </span>version
|
||||
<a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/libp2p/go-libp2p-daemon
|
||||
<a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a><span class="nb">cd</span><span class="w"> </span>go-libp2p-daemon
|
||||
<a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a>git<span class="w"> </span>checkout<span class="w"> </span>v0.0.1
|
||||
<a id="__codelineno-0-15" name="__codelineno-0-15" href="#__codelineno-0-15"></a>go<span class="w"> </span>install<span class="w"> </span>./...
|
||||
<a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a><span class="nb">cd</span><span class="w"> </span>..
|
||||
</code></pre></div>
|
||||
<h1 id="usage">Usage</h1>
|
||||
<h2 id="example">Example</h2>
|
||||
<p>Examples can be found in the <a href="https://github.com/status-im/nim-libp2p/tree/readme/examples/go-daemon">examples folder</a></p>
|
||||
<h2 id="getting-started">Getting Started</h2>
|
||||
<p>Try out the chat example. Full code can be found <a href="https://github.com/status-im/nim-libp2p/blob/master/examples/chat.nim">here</a>:</p>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>nim c -r --threads:on examples/directchat.nim
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>nim<span class="w"> </span>c<span class="w"> </span>-r<span class="w"> </span>--threads:on<span class="w"> </span>examples/directchat.nim
|
||||
</code></pre></div>
|
||||
<p>This will output a peer ID such as <code>QmbmHfVvouKammmQDJck4hz33WvVktNEe7pasxz2HgseRu</code> which you can use in another instance to connect to it.</p>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>./examples/directchat
|
||||
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>/connect QmbmHfVvouKammmQDJck4hz33WvVktNEe7pasxz2HgseRu
|
||||
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>/connect<span class="w"> </span>QmbmHfVvouKammmQDJck4hz33WvVktNEe7pasxz2HgseRu
|
||||
</code></pre></div>
|
||||
<p>You can now chat between the instances!</p>
|
||||
<p><img alt="Chat example" src="https://imgur.com/caYRu8K.gif" /></p>
|
||||
@ -496,10 +504,10 @@ For more information about the go daemon, check out <a href="https://github.com/
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.instant", "search.highlight"], "search": "../../assets/javascripts/workers/search.16e2a7d4.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script>
|
||||
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.instant", "search.highlight"], "search": "../../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
||||
|
||||
|
||||
<script src="../../assets/javascripts/bundle.8492ddcf.min.js"></script>
|
||||
<script src="../../assets/javascripts/bundle.b4d07000.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
105
docs/index.html
105
docs/index.html
@ -10,8 +10,12 @@
|
||||
|
||||
<link rel="canonical" href="https://status-im.github.io/nim-libp2p/docs/">
|
||||
|
||||
<link rel="icon" href="https://docs.libp2p.io/images/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.1, mkdocs-material-8.5.7">
|
||||
|
||||
|
||||
<link rel="next" href="tutorial_1_connect/">
|
||||
|
||||
<link rel="icon" href="https://libp2p.io/img/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.15">
|
||||
|
||||
|
||||
|
||||
@ -19,11 +23,10 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="assets/stylesheets/main.20d9efc8.min.css">
|
||||
<link rel="stylesheet" href="assets/stylesheets/main.26e3688c.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="assets/stylesheets/palette.cbb835fc.min.css">
|
||||
|
||||
<link rel="stylesheet" href="assets/stylesheets/palette.ecc896b0.min.css">
|
||||
|
||||
|
||||
|
||||
@ -56,7 +59,7 @@
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="">
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
|
||||
@ -80,11 +83,13 @@
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
|
||||
|
||||
<header class="md-header md-header--shadow" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href="." title="nim-libp2p" class="md-header__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
@ -107,27 +112,31 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
</form>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -157,7 +166,7 @@
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list"></ol>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -169,7 +178,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -203,7 +212,7 @@
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href="." title="nim-libp2p" class="md-nav__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
nim-libp2p
|
||||
@ -213,7 +222,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -236,17 +245,18 @@
|
||||
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_1" type="checkbox" id="__nav_1" checked>
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" checked>
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_1">
|
||||
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
|
||||
Tutorials
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" aria-label="Tutorials" data-md-level="1">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_1">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Tutorials
|
||||
@ -262,7 +272,7 @@
|
||||
|
||||
<li class="md-nav__item md-nav__item--active">
|
||||
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
|
||||
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
||||
|
||||
|
||||
|
||||
@ -449,27 +459,6 @@ the <a href="https://status-im.github.io/nim-libp2p/master/libp2p.html">full ref
|
||||
|
||||
<footer class="md-footer">
|
||||
|
||||
|
||||
<nav class="md-footer__inner md-grid" aria-label="Footer" >
|
||||
|
||||
|
||||
|
||||
<a href="tutorial_1_connect/" class="md-footer__link md-footer__link--next" aria-label="Next: Simple connection" rel="next">
|
||||
<div class="md-footer__title">
|
||||
<div class="md-ellipsis">
|
||||
<span class="md-footer__direction">
|
||||
Next
|
||||
</span>
|
||||
Simple connection
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
</nav>
|
||||
|
||||
<div class="md-footer-meta md-typeset">
|
||||
<div class="md-footer-meta__inner md-grid">
|
||||
<div class="md-copyright">
|
||||
@ -491,10 +480,10 @@ the <a href="https://status-im.github.io/nim-libp2p/master/libp2p.html">full ref
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
<script id="__config" type="application/json">{"base": ".", "features": ["navigation.instant", "search.highlight"], "search": "assets/javascripts/workers/search.16e2a7d4.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script>
|
||||
<script id="__config" type="application/json">{"base": ".", "features": ["navigation.instant", "search.highlight"], "search": "assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
||||
|
||||
|
||||
<script src="assets/javascripts/bundle.8492ddcf.min.js"></script>
|
||||
<script src="assets/javascripts/bundle.b4d07000.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
File diff suppressed because one or more lines are too long
@ -2,47 +2,47 @@
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://status-im.github.io/nim-libp2p/docs/</loc>
|
||||
<lastmod>2022-10-30</lastmod>
|
||||
<lastmod>2023-06-07</lastmod>
|
||||
<changefreq>daily</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://status-im.github.io/nim-libp2p/docs/circuitrelay/</loc>
|
||||
<lastmod>2022-10-30</lastmod>
|
||||
<lastmod>2023-06-07</lastmod>
|
||||
<changefreq>daily</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://status-im.github.io/nim-libp2p/docs/tutorial_1_connect/</loc>
|
||||
<lastmod>2022-10-30</lastmod>
|
||||
<lastmod>2023-06-07</lastmod>
|
||||
<changefreq>daily</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://status-im.github.io/nim-libp2p/docs/tutorial_2_customproto/</loc>
|
||||
<lastmod>2022-10-30</lastmod>
|
||||
<lastmod>2023-06-07</lastmod>
|
||||
<changefreq>daily</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://status-im.github.io/nim-libp2p/docs/tutorial_3_protobuf/</loc>
|
||||
<lastmod>2022-10-30</lastmod>
|
||||
<lastmod>2023-06-07</lastmod>
|
||||
<changefreq>daily</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://status-im.github.io/nim-libp2p/docs/tutorial_4_gossipsub/</loc>
|
||||
<lastmod>2022-10-30</lastmod>
|
||||
<lastmod>2023-06-07</lastmod>
|
||||
<changefreq>daily</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://status-im.github.io/nim-libp2p/docs/tutorial_5_discovery/</loc>
|
||||
<lastmod>2022-10-30</lastmod>
|
||||
<lastmod>2023-06-07</lastmod>
|
||||
<changefreq>daily</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://status-im.github.io/nim-libp2p/docs/tutorial_6_game/</loc>
|
||||
<lastmod>2022-10-30</lastmod>
|
||||
<lastmod>2023-06-07</lastmod>
|
||||
<changefreq>daily</changefreq>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://status-im.github.io/nim-libp2p/docs/go-daemon/daemonapi/</loc>
|
||||
<lastmod>2022-10-30</lastmod>
|
||||
<lastmod>2023-06-07</lastmod>
|
||||
<changefreq>daily</changefreq>
|
||||
</url>
|
||||
</urlset>
|
Binary file not shown.
@ -10,8 +10,14 @@
|
||||
|
||||
<link rel="canonical" href="https://status-im.github.io/nim-libp2p/docs/tutorial_1_connect/">
|
||||
|
||||
<link rel="icon" href="https://docs.libp2p.io/images/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.1, mkdocs-material-8.5.7">
|
||||
|
||||
<link rel="prev" href="..">
|
||||
|
||||
|
||||
<link rel="next" href="../tutorial_2_customproto/">
|
||||
|
||||
<link rel="icon" href="https://libp2p.io/img/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.15">
|
||||
|
||||
|
||||
|
||||
@ -19,11 +25,10 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.20d9efc8.min.css">
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.26e3688c.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/palette.cbb835fc.min.css">
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/palette.ecc896b0.min.css">
|
||||
|
||||
|
||||
|
||||
@ -56,7 +61,7 @@
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="">
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
|
||||
@ -80,11 +85,13 @@
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
|
||||
|
||||
<header class="md-header md-header--shadow" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href=".." title="nim-libp2p" class="md-header__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
@ -107,27 +114,31 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
</form>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -157,7 +168,7 @@
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list"></ol>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -169,7 +180,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -203,7 +214,7 @@
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href=".." title="nim-libp2p" class="md-nav__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
nim-libp2p
|
||||
@ -213,7 +224,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -236,17 +247,18 @@
|
||||
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_1" type="checkbox" id="__nav_1" checked>
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" checked>
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_1">
|
||||
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
|
||||
Tutorials
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" aria-label="Tutorials" data-md-level="1">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_1">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Tutorials
|
||||
@ -276,7 +288,7 @@
|
||||
|
||||
<li class="md-nav__item md-nav__item--active">
|
||||
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
|
||||
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
||||
|
||||
|
||||
|
||||
@ -501,7 +513,7 @@
|
||||
<p>Install Nim via their <a href="https://nim-lang.org/install.html">official website</a>.
|
||||
Check Nim's installation via <code>nim --version</code> and its package manager Nimble via <code>nimble --version</code>.</p>
|
||||
<p>You can now install the latest version of <code>nim-libp2p</code>:
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>nimble install libp2p@#master
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>nimble<span class="w"> </span>install<span class="w"> </span>libp2p@#master
|
||||
</code></pre></div></p>
|
||||
<h2 id="a-simple-ping-application">A simple ping application</h2>
|
||||
<p>We'll start by creating a simple application, which is starting two libp2p <a href="https://docs.libp2p.io/concepts/stream-multiplexing/#switch-swarm">switch</a>, and pinging each other using the <a href="https://docs.libp2p.io/concepts/protocols/#ping">Ping</a> protocol.</p>
|
||||
@ -509,62 +521,62 @@ Check Nim's installation via <code>nim --version</code> and its package manager
|
||||
<p>You can find the source of this tutorial (and other tutorials) in the <a href="https://github.com/status-im/nim-libp2p/tree/master/examples">libp2p/examples</a> folder!</p>
|
||||
</div>
|
||||
<p>Let's create a <code>part1.nim</code>, and import our dependencies:
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="kn">import</span> <span class="n">chronos</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="kn">import</span><span class="w"> </span><span class="n">chronos</span>
|
||||
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>
|
||||
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="kn">import</span> <span class="n">libp2p</span>
|
||||
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="kn">import</span> <span class="n">libp2p</span><span class="o">/</span><span class="n">protocols</span><span class="o">/</span><span class="n">ping</span>
|
||||
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="kn">import</span><span class="w"> </span><span class="n">libp2p</span>
|
||||
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="kn">import</span><span class="w"> </span><span class="n">libp2p</span><span class="o">/</span><span class="n">protocols</span><span class="o">/</span><span class="n">ping</span>
|
||||
</code></pre></div>
|
||||
<a href="https://github.com/status-im/nim-chronos">chronos</a> the asynchronous framework used by <code>nim-libp2p</code></p>
|
||||
<p>Next, we'll create an helper procedure to create our switches. A switch needs a bit of configuration, and it will be easier to do this configuration only once:
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="k">proc </span><span class="nf">createSwitch</span><span class="p">(</span><span class="n">ma</span><span class="p">:</span> <span class="n">MultiAddress</span><span class="p">,</span> <span class="n">rng</span><span class="p">:</span> <span class="k">ref</span> <span class="n">HmacDrbgContext</span><span class="p">):</span> <span class="n">Switch</span> <span class="o">=</span>
|
||||
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a> <span class="kd">var</span> <span class="n">switch</span> <span class="o">=</span> <span class="n">SwitchBuilder</span>
|
||||
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a> <span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a> <span class="p">.</span><span class="n">withRng</span><span class="p">(</span><span class="n">rng</span><span class="p">)</span> <span class="c"># Give the application RNG</span>
|
||||
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a> <span class="p">.</span><span class="n">withAddress</span><span class="p">(</span><span class="n">ma</span><span class="p">)</span> <span class="c"># Our local address(es)</span>
|
||||
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a> <span class="p">.</span><span class="n">withTcpTransport</span><span class="p">()</span> <span class="c"># Use TCP as transport</span>
|
||||
<a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a> <span class="p">.</span><span class="n">withMplex</span><span class="p">()</span> <span class="c"># Use Mplex as muxer</span>
|
||||
<a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a> <span class="p">.</span><span class="n">withNoise</span><span class="p">()</span> <span class="c"># Use Noise as secure manager</span>
|
||||
<a id="__codelineno-2-9" name="__codelineno-2-9" href="#__codelineno-2-9"></a> <span class="p">.</span><span class="n">build</span><span class="p">()</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="k">proc</span><span class="w"> </span><span class="nf">createSwitch</span><span class="p">(</span><span class="n">ma</span><span class="p">:</span><span class="w"> </span><span class="n">MultiAddress</span><span class="p">,</span><span class="w"> </span><span class="n">rng</span><span class="p">:</span><span class="w"> </span><span class="k">ref</span><span class="w"> </span><span class="n">HmacDrbgContext</span><span class="p">):</span><span class="w"> </span><span class="n">Switch</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="n">switch</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SwitchBuilder</span>
|
||||
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="w"> </span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="w"> </span><span class="p">.</span><span class="n">withRng</span><span class="p">(</span><span class="n">rng</span><span class="p">)</span><span class="w"> </span><span class="c"># Give the application RNG</span>
|
||||
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="w"> </span><span class="p">.</span><span class="n">withAddress</span><span class="p">(</span><span class="n">ma</span><span class="p">)</span><span class="w"> </span><span class="c"># Our local address(es)</span>
|
||||
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a><span class="w"> </span><span class="p">.</span><span class="n">withTcpTransport</span><span class="p">()</span><span class="w"> </span><span class="c"># Use TCP as transport</span>
|
||||
<a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a><span class="w"> </span><span class="p">.</span><span class="n">withMplex</span><span class="p">()</span><span class="w"> </span><span class="c"># Use Mplex as muxer</span>
|
||||
<a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a><span class="w"> </span><span class="p">.</span><span class="n">withNoise</span><span class="p">()</span><span class="w"> </span><span class="c"># Use Noise as secure manager</span>
|
||||
<a id="__codelineno-2-9" name="__codelineno-2-9" href="#__codelineno-2-9"></a><span class="w"> </span><span class="p">.</span><span class="n">build</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-10" name="__codelineno-2-10" href="#__codelineno-2-10"></a>
|
||||
<a id="__codelineno-2-11" name="__codelineno-2-11" href="#__codelineno-2-11"></a> <span class="k">return</span> <span class="n">switch</span>
|
||||
<a id="__codelineno-2-11" name="__codelineno-2-11" href="#__codelineno-2-11"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">switch</span>
|
||||
</code></pre></div>
|
||||
This will create a switch using <a href="https://docs.libp2p.io/concepts/stream-multiplexing/">Mplex</a> as a multiplexer, Noise to secure the communication, and TCP as an underlying transport.</p>
|
||||
<p>You can of course tweak this, to use a different or multiple transport, or tweak the configuration of Mplex and Noise, but this is some sane defaults that we'll use going forward.</p>
|
||||
<p>Let's now start to create our main procedure:
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="k">proc </span><span class="nf">main</span><span class="p">()</span> <span class="p">{.</span><span class="n">async</span><span class="p">,</span> <span class="n">gcsafe</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a> <span class="k">let</span>
|
||||
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a> <span class="n">rng</span> <span class="o">=</span> <span class="n">newRng</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a> <span class="n">localAddress</span> <span class="o">=</span> <span class="n">MultiAddress</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="s">"/ip4/0.0.0.0/tcp/0"</span><span class="p">).</span><span class="n">tryGet</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a> <span class="n">pingProtocol</span> <span class="o">=</span> <span class="n">Ping</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">rng</span><span class="o">=</span><span class="n">rng</span><span class="p">)</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="k">proc</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="sx">{.async</span>,<span class="w"> </span><span class="sx">gcsafe.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a><span class="w"> </span><span class="k">let</span>
|
||||
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="w"> </span><span class="n">rng</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newRng</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a><span class="w"> </span><span class="n">localAddress</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MultiAddress</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="s">"/ip4/0.0.0.0/tcp/0"</span><span class="p">).</span><span class="n">tryGet</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a><span class="w"> </span><span class="n">pingProtocol</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Ping</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">rng</span><span class="o">=</span><span class="n">rng</span><span class="p">)</span>
|
||||
</code></pre></div>
|
||||
We created some variables that we'll need for the rest of the application: the global <code>rng</code> instance, our <code>localAddress</code>, and an instance of the <code>Ping</code> protocol.
|
||||
The address is in the <a href="https://github.com/multiformats/multiaddr">MultiAddress</a> format. The port <code>0</code> means "take any port available".</p>
|
||||
<p><code>tryGet</code> is procedure which is part of <a href="https://github.com/arnetheduck/nim-result/">nim-result</a>, that will throw an exception if the supplied MultiAddress is invalid.</p>
|
||||
<p>We can now create our two switches:
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a> <span class="k">let</span>
|
||||
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a> <span class="n">switch1</span> <span class="o">=</span> <span class="n">createSwitch</span><span class="p">(</span><span class="n">localAddress</span><span class="p">,</span> <span class="n">rng</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a> <span class="n">switch2</span> <span class="o">=</span> <span class="n">createSwitch</span><span class="p">(</span><span class="n">localAddress</span><span class="p">,</span> <span class="n">rng</span><span class="p">)</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="w"> </span><span class="k">let</span>
|
||||
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a><span class="w"> </span><span class="n">switch1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">createSwitch</span><span class="p">(</span><span class="n">localAddress</span><span class="p">,</span><span class="w"> </span><span class="n">rng</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="w"> </span><span class="n">switch2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">createSwitch</span><span class="p">(</span><span class="n">localAddress</span><span class="p">,</span><span class="w"> </span><span class="n">rng</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a>
|
||||
<a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a> <span class="n">switch1</span><span class="p">.</span><span class="n">mount</span><span class="p">(</span><span class="n">pingProtocol</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a><span class="w"> </span><span class="n">switch1</span><span class="p">.</span><span class="n">mount</span><span class="p">(</span><span class="n">pingProtocol</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a>
|
||||
<a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a> <span class="n">await</span> <span class="n">switch1</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a> <span class="n">await</span> <span class="n">switch2</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">switch1</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">switch2</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
</code></pre></div>
|
||||
We've <strong>mounted</strong> the <code>pingProtocol</code> on our first switch. This means that the first switch will actually listen for any ping requests coming in, and handle them accordingly.</p>
|
||||
<p>Now that we've started the nodes, they are listening for incoming peers.
|
||||
We can find out which port was attributed, and the resulting local addresses, by using <code>switch1.peerInfo.addrs</code>.</p>
|
||||
<p>We'll <strong>dial</strong> the first switch from the second one, by specifying it's <strong>Peer ID</strong>, it's <strong>MultiAddress</strong> and the <strong><code>Ping</code> protocol codec</strong>:
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a> <span class="k">let</span> <span class="n">conn</span> <span class="o">=</span> <span class="n">await</span> <span class="n">switch2</span><span class="p">.</span><span class="n">dial</span><span class="p">(</span><span class="n">switch1</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">,</span> <span class="n">switch1</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">addrs</span><span class="p">,</span> <span class="n">PingCodec</span><span class="p">)</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">conn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">switch2</span><span class="p">.</span><span class="n">dial</span><span class="p">(</span><span class="n">switch1</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">,</span><span class="w"> </span><span class="n">switch1</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">addrs</span><span class="p">,</span><span class="w"> </span><span class="n">PingCodec</span><span class="p">)</span>
|
||||
</code></pre></div>
|
||||
We now have a <code>Ping</code> connection setup between the second and the first switch, we can use it to actually ping the node:
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a> <span class="c"># ping the other node and echo the ping duration</span>
|
||||
<a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a> <span class="n">echo</span> <span class="s">"ping: "</span><span class="p">,</span> <span class="n">await</span> <span class="n">pingProtocol</span><span class="p">.</span><span class="n">ping</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="w"> </span><span class="c"># ping the other node and echo the ping duration</span>
|
||||
<a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a><span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="s">"ping: "</span><span class="p">,</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">pingProtocol</span><span class="p">.</span><span class="n">ping</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
||||
<a id="__codelineno-6-3" name="__codelineno-6-3" href="#__codelineno-6-3"></a>
|
||||
<a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a> <span class="c"># We must close the connection ourselves when we're done with it</span>
|
||||
<a id="__codelineno-6-5" name="__codelineno-6-5" href="#__codelineno-6-5"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<a id="__codelineno-6-4" name="__codelineno-6-4" href="#__codelineno-6-4"></a><span class="w"> </span><span class="c"># We must close the connection ourselves when we're done with it</span>
|
||||
<a id="__codelineno-6-5" name="__codelineno-6-5" href="#__codelineno-6-5"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
|
||||
</code></pre></div>
|
||||
And that's it! Just a little bit of cleanup: shutting down the switches, waiting for them to stop, and we'll call our <code>main</code> procedure:
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a> <span class="n">await</span> <span class="n">allFutures</span><span class="p">(</span><span class="n">switch1</span><span class="p">.</span><span class="n">stop</span><span class="p">(),</span> <span class="n">switch2</span><span class="p">.</span><span class="n">stop</span><span class="p">())</span> <span class="c"># close connections and shutdown all transports</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">allFutures</span><span class="p">(</span><span class="n">switch1</span><span class="p">.</span><span class="n">stop</span><span class="p">(),</span><span class="w"> </span><span class="n">switch2</span><span class="p">.</span><span class="n">stop</span><span class="p">())</span><span class="w"> </span><span class="c"># close connections and shutdown all transports</span>
|
||||
<a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a>
|
||||
<a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="n">waitFor</span><span class="p">(</span><span class="n">main</span><span class="p">())</span>
|
||||
</code></pre></div>
|
||||
@ -586,42 +598,6 @@ You can now run this program using <code>nim c -r part1.nim</code>, and you shou
|
||||
|
||||
<footer class="md-footer">
|
||||
|
||||
|
||||
<nav class="md-footer__inner md-grid" aria-label="Footer" >
|
||||
|
||||
|
||||
<a href=".." class="md-footer__link md-footer__link--prev" aria-label="Previous: Introduction" rel="prev">
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
||||
</div>
|
||||
<div class="md-footer__title">
|
||||
<div class="md-ellipsis">
|
||||
<span class="md-footer__direction">
|
||||
Previous
|
||||
</span>
|
||||
Introduction
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a href="../tutorial_2_customproto/" class="md-footer__link md-footer__link--next" aria-label="Next: Create a custom protocol" rel="next">
|
||||
<div class="md-footer__title">
|
||||
<div class="md-ellipsis">
|
||||
<span class="md-footer__direction">
|
||||
Next
|
||||
</span>
|
||||
Create a custom protocol
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
</nav>
|
||||
|
||||
<div class="md-footer-meta md-typeset">
|
||||
<div class="md-footer-meta__inner md-grid">
|
||||
<div class="md-copyright">
|
||||
@ -643,10 +619,10 @@ You can now run this program using <code>nim c -r part1.nim</code>, and you shou
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.instant", "search.highlight"], "search": "../assets/javascripts/workers/search.16e2a7d4.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script>
|
||||
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.instant", "search.highlight"], "search": "../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.8492ddcf.min.js"></script>
|
||||
<script src="../assets/javascripts/bundle.b4d07000.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
@ -32,7 +32,7 @@ proc new(T: typedesc[TestProto]): T =
|
||||
# We must close the connections ourselves when we're done with it
|
||||
await conn.close()
|
||||
|
||||
return T(codecs: @[TestCodec], handler: handle)
|
||||
return T.new(codecs = @[TestCodec], handler = handle)
|
||||
|
||||
## This is a constructor for our `TestProto`, that will specify our `codecs` and a `handler`, which will be called for each incoming peer asking for this protocol.
|
||||
## In our handle, we simply read a message from the connection and `echo` it.
|
||||
|
@ -10,8 +10,14 @@
|
||||
|
||||
<link rel="canonical" href="https://status-im.github.io/nim-libp2p/docs/tutorial_2_customproto/">
|
||||
|
||||
<link rel="icon" href="https://docs.libp2p.io/images/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.1, mkdocs-material-8.5.7">
|
||||
|
||||
<link rel="prev" href="../tutorial_1_connect/">
|
||||
|
||||
|
||||
<link rel="next" href="../tutorial_3_protobuf/">
|
||||
|
||||
<link rel="icon" href="https://libp2p.io/img/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.15">
|
||||
|
||||
|
||||
|
||||
@ -19,11 +25,10 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.20d9efc8.min.css">
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.26e3688c.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/palette.cbb835fc.min.css">
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/palette.ecc896b0.min.css">
|
||||
|
||||
|
||||
|
||||
@ -56,7 +61,7 @@
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="">
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
|
||||
@ -80,11 +85,13 @@
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
|
||||
|
||||
<header class="md-header md-header--shadow" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href=".." title="nim-libp2p" class="md-header__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
@ -107,27 +114,31 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
</form>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -157,7 +168,7 @@
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list"></ol>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -169,7 +180,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -203,7 +214,7 @@
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href=".." title="nim-libp2p" class="md-nav__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
nim-libp2p
|
||||
@ -213,7 +224,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -236,17 +247,18 @@
|
||||
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_1" type="checkbox" id="__nav_1" checked>
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" checked>
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_1">
|
||||
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
|
||||
Tutorials
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" aria-label="Tutorials" data-md-level="1">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_1">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Tutorials
|
||||
@ -290,7 +302,7 @@
|
||||
|
||||
<li class="md-nav__item md-nav__item--active">
|
||||
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
|
||||
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
||||
|
||||
|
||||
|
||||
@ -433,60 +445,60 @@
|
||||
<p>In the <a href="../tutorial_1_connect/">previous tutorial</a>, we've looked at how to create a simple ping program using the <code>nim-libp2p</code>.</p>
|
||||
<p>We'll now look at how to create a custom protocol inside the libp2p</p>
|
||||
<p>Let's create a <code>part2.nim</code>, and import our dependencies:
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kn">import</span> <span class="n">chronos</span>
|
||||
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">import</span> <span class="n">stew</span><span class="o">/</span><span class="n">byteutils</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kn">import</span><span class="w"> </span><span class="n">chronos</span>
|
||||
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">import</span><span class="w"> </span><span class="n">stew</span><span class="o">/</span><span class="n">byteutils</span>
|
||||
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a>
|
||||
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="kn">import</span> <span class="n">libp2p</span>
|
||||
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="kn">import</span><span class="w"> </span><span class="n">libp2p</span>
|
||||
</code></pre></div>
|
||||
This is similar to the first tutorial, except we don't need to import the <code>Ping</code> protocol.</p>
|
||||
<p>Next, we'll declare our custom protocol
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="k">const</span> <span class="n">TestCodec</span> <span class="o">=</span> <span class="s">"/test/proto/1.0.0"</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="k">const</span><span class="w"> </span><span class="n">TestCodec</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"/test/proto/1.0.0"</span>
|
||||
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>
|
||||
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="k">type</span> <span class="n">TestProto</span> <span class="o">=</span> <span class="k">ref</span> <span class="k">object</span> <span class="k">of</span> <span class="n">LPProtocol</span>
|
||||
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="k">type</span><span class="w"> </span><span class="n">TestProto</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">ref</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="n">LPProtocol</span>
|
||||
</code></pre></div>
|
||||
We've set a <a href="https://docs.libp2p.io/concepts/protocols/#protocol-ids">protocol ID</a>, and created a custom <code>LPProtocol</code>. In a more complex protocol, we could use this structure to store interesting variables.</p>
|
||||
<p>A protocol generally has two part: and handling/server part, and a dialing/client part.
|
||||
Theses two parts can be identical, but in our trivial protocol, the server will wait for a message from the client, and the client will send a message, so we have to handle the two cases separately.</p>
|
||||
<p>Let's start with the server part:
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="k">proc </span><span class="nf">new</span><span class="p">(</span><span class="n">T</span><span class="p">:</span> <span class="n">typedesc</span><span class="o">[</span><span class="n">TestProto</span><span class="o">]</span><span class="p">):</span> <span class="n">T</span> <span class="o">=</span>
|
||||
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a> <span class="c"># every incoming connections will in be handled in this closure</span>
|
||||
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a> <span class="k">proc </span><span class="nf">handle</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span> <span class="n">Connection</span><span class="p">,</span> <span class="n">proto</span><span class="p">:</span> <span class="nb">string</span><span class="p">)</span> <span class="p">{.</span><span class="n">async</span><span class="p">,</span> <span class="n">gcsafe</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a> <span class="c"># Read up to 1024 bytes from this connection, and transform them into</span>
|
||||
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a> <span class="c"># a string</span>
|
||||
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a> <span class="n">echo</span> <span class="s">"Got from remote - "</span><span class="p">,</span> <span class="nb">string</span><span class="p">.</span><span class="n">fromBytes</span><span class="p">(</span><span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">1024</span><span class="p">))</span>
|
||||
<a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a> <span class="c"># We must close the connections ourselves when we're done with it</span>
|
||||
<a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="k">proc</span><span class="w"> </span><span class="nf">new</span><span class="p">(</span><span class="n">T</span><span class="p">:</span><span class="w"> </span><span class="n">typedesc</span><span class="o">[</span><span class="n">TestProto</span><span class="o">]</span><span class="p">):</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="w"> </span><span class="c"># every incoming connections will in be handled in this closure</span>
|
||||
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="w"> </span><span class="k">proc</span><span class="w"> </span><span class="nf">handle</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span><span class="w"> </span><span class="n">Connection</span><span class="p">,</span><span class="w"> </span><span class="n">proto</span><span class="p">:</span><span class="w"> </span><span class="nb">string</span><span class="p">)</span><span class="w"> </span><span class="sx">{.async</span>,<span class="w"> </span><span class="sx">gcsafe.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="w"> </span><span class="c"># Read up to 1024 bytes from this connection, and transform them into</span>
|
||||
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="w"> </span><span class="c"># a string</span>
|
||||
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a><span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="s">"Got from remote - "</span><span class="p">,</span><span class="w"> </span><span class="nb">string</span><span class="p">.</span><span class="n">fromBytes</span><span class="p">(</span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">1024</span><span class="p">))</span>
|
||||
<a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a><span class="w"> </span><span class="c"># We must close the connections ourselves when we're done with it</span>
|
||||
<a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-9" name="__codelineno-2-9" href="#__codelineno-2-9"></a>
|
||||
<a id="__codelineno-2-10" name="__codelineno-2-10" href="#__codelineno-2-10"></a> <span class="k">return</span> <span class="n">T</span><span class="p">(</span><span class="n">codecs</span><span class="p">:</span> <span class="o">@[</span><span class="n">TestCodec</span><span class="o">]</span><span class="p">,</span> <span class="n">handler</span><span class="p">:</span> <span class="n">handle</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-10" name="__codelineno-2-10" href="#__codelineno-2-10"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">T</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">codecs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">@[</span><span class="n">TestCodec</span><span class="o">]</span><span class="p">,</span><span class="w"> </span><span class="n">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">handle</span><span class="p">)</span>
|
||||
</code></pre></div>
|
||||
This is a constructor for our <code>TestProto</code>, that will specify our <code>codecs</code> and a <code>handler</code>, which will be called for each incoming peer asking for this protocol.
|
||||
In our handle, we simply read a message from the connection and <code>echo</code> it.</p>
|
||||
<p>We can now create our client part:
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="k">proc </span><span class="nf">hello</span><span class="p">(</span><span class="n">p</span><span class="p">:</span> <span class="n">TestProto</span><span class="p">,</span> <span class="n">conn</span><span class="p">:</span> <span class="n">Connection</span><span class="p">)</span> <span class="p">{.</span><span class="n">async</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="s">"Hello p2p!"</span><span class="p">)</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="k">proc</span><span class="w"> </span><span class="nf">hello</span><span class="p">(</span><span class="n">p</span><span class="p">:</span><span class="w"> </span><span class="n">TestProto</span><span class="p">,</span><span class="w"> </span><span class="n">conn</span><span class="p">:</span><span class="w"> </span><span class="n">Connection</span><span class="p">)</span><span class="w"> </span><span class="sx">{.async.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="s">"Hello p2p!"</span><span class="p">)</span>
|
||||
</code></pre></div>
|
||||
Again, pretty straight-forward, we just send a message on the connection.</p>
|
||||
<p>We can now create our main procedure:
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="k">proc </span><span class="nf">main</span><span class="p">()</span> <span class="p">{.</span><span class="n">async</span><span class="p">,</span> <span class="n">gcsafe</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a> <span class="k">let</span>
|
||||
<a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a> <span class="n">rng</span> <span class="o">=</span> <span class="n">newRng</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a> <span class="n">testProto</span> <span class="o">=</span> <span class="n">TestProto</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a> <span class="n">switch1</span> <span class="o">=</span> <span class="n">newStandardSwitch</span><span class="p">(</span><span class="n">rng</span><span class="o">=</span><span class="n">rng</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a> <span class="n">switch2</span> <span class="o">=</span> <span class="n">newStandardSwitch</span><span class="p">(</span><span class="n">rng</span><span class="o">=</span><span class="n">rng</span><span class="p">)</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="k">proc</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="sx">{.async</span>,<span class="w"> </span><span class="sx">gcsafe.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a><span class="w"> </span><span class="k">let</span>
|
||||
<a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="w"> </span><span class="n">rng</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newRng</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a><span class="w"> </span><span class="n">testProto</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TestProto</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a><span class="w"> </span><span class="n">switch1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newStandardSwitch</span><span class="p">(</span><span class="n">rng</span><span class="o">=</span><span class="n">rng</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a><span class="w"> </span><span class="n">switch2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newStandardSwitch</span><span class="p">(</span><span class="n">rng</span><span class="o">=</span><span class="n">rng</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a>
|
||||
<a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a> <span class="n">switch1</span><span class="p">.</span><span class="n">mount</span><span class="p">(</span><span class="n">testProto</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a><span class="w"> </span><span class="n">switch1</span><span class="p">.</span><span class="n">mount</span><span class="p">(</span><span class="n">testProto</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-9" name="__codelineno-4-9" href="#__codelineno-4-9"></a>
|
||||
<a id="__codelineno-4-10" name="__codelineno-4-10" href="#__codelineno-4-10"></a> <span class="n">await</span> <span class="n">switch1</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-11" name="__codelineno-4-11" href="#__codelineno-4-11"></a> <span class="n">await</span> <span class="n">switch2</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-10" name="__codelineno-4-10" href="#__codelineno-4-10"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">switch1</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-11" name="__codelineno-4-11" href="#__codelineno-4-11"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">switch2</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-12" name="__codelineno-4-12" href="#__codelineno-4-12"></a>
|
||||
<a id="__codelineno-4-13" name="__codelineno-4-13" href="#__codelineno-4-13"></a> <span class="k">let</span> <span class="n">conn</span> <span class="o">=</span> <span class="n">await</span> <span class="n">switch2</span><span class="p">.</span><span class="n">dial</span><span class="p">(</span><span class="n">switch1</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">,</span> <span class="n">switch1</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">addrs</span><span class="p">,</span> <span class="n">TestCodec</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-13" name="__codelineno-4-13" href="#__codelineno-4-13"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">conn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">switch2</span><span class="p">.</span><span class="n">dial</span><span class="p">(</span><span class="n">switch1</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">,</span><span class="w"> </span><span class="n">switch1</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">addrs</span><span class="p">,</span><span class="w"> </span><span class="n">TestCodec</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-14" name="__codelineno-4-14" href="#__codelineno-4-14"></a>
|
||||
<a id="__codelineno-4-15" name="__codelineno-4-15" href="#__codelineno-4-15"></a> <span class="n">await</span> <span class="n">testProto</span><span class="p">.</span><span class="n">hello</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-15" name="__codelineno-4-15" href="#__codelineno-4-15"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">testProto</span><span class="p">.</span><span class="n">hello</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-16" name="__codelineno-4-16" href="#__codelineno-4-16"></a>
|
||||
<a id="__codelineno-4-17" name="__codelineno-4-17" href="#__codelineno-4-17"></a> <span class="c"># We must close the connection ourselves when we're done with it</span>
|
||||
<a id="__codelineno-4-18" name="__codelineno-4-18" href="#__codelineno-4-18"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-17" name="__codelineno-4-17" href="#__codelineno-4-17"></a><span class="w"> </span><span class="c"># We must close the connection ourselves when we're done with it</span>
|
||||
<a id="__codelineno-4-18" name="__codelineno-4-18" href="#__codelineno-4-18"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-19" name="__codelineno-4-19" href="#__codelineno-4-19"></a>
|
||||
<a id="__codelineno-4-20" name="__codelineno-4-20" href="#__codelineno-4-20"></a> <span class="n">await</span> <span class="n">allFutures</span><span class="p">(</span><span class="n">switch1</span><span class="p">.</span><span class="n">stop</span><span class="p">(),</span> <span class="n">switch2</span><span class="p">.</span><span class="n">stop</span><span class="p">())</span> <span class="c"># close connections and shutdown all transports</span>
|
||||
<a id="__codelineno-4-20" name="__codelineno-4-20" href="#__codelineno-4-20"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">allFutures</span><span class="p">(</span><span class="n">switch1</span><span class="p">.</span><span class="n">stop</span><span class="p">(),</span><span class="w"> </span><span class="n">switch2</span><span class="p">.</span><span class="n">stop</span><span class="p">())</span><span class="w"> </span><span class="c"># close connections and shutdown all transports</span>
|
||||
</code></pre></div>
|
||||
This is very similar to the first tutorial's <code>main</code>, the only noteworthy difference is that we use <code>newStandardSwitch</code>, which is similar to the <code>createSwitch</code> of the first tutorial, but is bundled directly in libp2p</p>
|
||||
<p>We can now wrap our program by calling our main proc:
|
||||
@ -510,42 +522,6 @@ In the <a href="../tutorial_3_protobuf/">next tutorial</a>, we'll create a more
|
||||
|
||||
<footer class="md-footer">
|
||||
|
||||
|
||||
<nav class="md-footer__inner md-grid" aria-label="Footer" >
|
||||
|
||||
|
||||
<a href="../tutorial_1_connect/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Simple connection" rel="prev">
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
||||
</div>
|
||||
<div class="md-footer__title">
|
||||
<div class="md-ellipsis">
|
||||
<span class="md-footer__direction">
|
||||
Previous
|
||||
</span>
|
||||
Simple connection
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a href="../tutorial_3_protobuf/" class="md-footer__link md-footer__link--next" aria-label="Next: Protobuf" rel="next">
|
||||
<div class="md-footer__title">
|
||||
<div class="md-ellipsis">
|
||||
<span class="md-footer__direction">
|
||||
Next
|
||||
</span>
|
||||
Protobuf
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
</nav>
|
||||
|
||||
<div class="md-footer-meta md-typeset">
|
||||
<div class="md-footer-meta__inner md-grid">
|
||||
<div class="md-copyright">
|
||||
@ -567,10 +543,10 @@ In the <a href="../tutorial_3_protobuf/">next tutorial</a>, we'll create a more
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.instant", "search.highlight"], "search": "../assets/javascripts/workers/search.16e2a7d4.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script>
|
||||
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.instant", "search.highlight"], "search": "../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.8492ddcf.min.js"></script>
|
||||
<script src="../assets/javascripts/bundle.b4d07000.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
@ -107,7 +107,7 @@ type
|
||||
metricGetter: MetricCallback
|
||||
|
||||
proc new(_: typedesc[MetricProto], cb: MetricCallback): MetricProto =
|
||||
let res = MetricProto(metricGetter: cb)
|
||||
var res: MetricProto
|
||||
proc handle(conn: Connection, proto: string) {.async, gcsafe.} =
|
||||
let
|
||||
metrics = await res.metricGetter()
|
||||
@ -115,8 +115,8 @@ proc new(_: typedesc[MetricProto], cb: MetricCallback): MetricProto =
|
||||
await conn.writeLp(asProtobuf.buffer)
|
||||
await conn.close()
|
||||
|
||||
res.codecs = @["/metric-getter/1.0.0"]
|
||||
res.handler = handle
|
||||
res = MetricProto.new(@["/metric-getter/1.0.0"], handle)
|
||||
res.metricGetter = cb
|
||||
return res
|
||||
|
||||
proc fetch(p: MetricProto, conn: Connection): Future[MetricList] {.async.} =
|
||||
|
@ -10,8 +10,14 @@
|
||||
|
||||
<link rel="canonical" href="https://status-im.github.io/nim-libp2p/docs/tutorial_3_protobuf/">
|
||||
|
||||
<link rel="icon" href="https://docs.libp2p.io/images/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.1, mkdocs-material-8.5.7">
|
||||
|
||||
<link rel="prev" href="../tutorial_2_customproto/">
|
||||
|
||||
|
||||
<link rel="next" href="../tutorial_4_gossipsub/">
|
||||
|
||||
<link rel="icon" href="https://libp2p.io/img/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.15">
|
||||
|
||||
|
||||
|
||||
@ -19,11 +25,10 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.20d9efc8.min.css">
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.26e3688c.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/palette.cbb835fc.min.css">
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/palette.ecc896b0.min.css">
|
||||
|
||||
|
||||
|
||||
@ -56,7 +61,7 @@
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="">
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
|
||||
@ -80,11 +85,13 @@
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
|
||||
|
||||
<header class="md-header md-header--shadow" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href=".." title="nim-libp2p" class="md-header__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
@ -107,27 +114,31 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
</form>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -157,7 +168,7 @@
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list"></ol>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -169,7 +180,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -203,7 +214,7 @@
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href=".." title="nim-libp2p" class="md-nav__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
nim-libp2p
|
||||
@ -213,7 +224,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -236,17 +247,18 @@
|
||||
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_1" type="checkbox" id="__nav_1" checked>
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" checked>
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_1">
|
||||
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
|
||||
Tutorials
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" aria-label="Tutorials" data-md-level="1">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_1">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Tutorials
|
||||
@ -304,7 +316,7 @@
|
||||
|
||||
<li class="md-nav__item md-nav__item--active">
|
||||
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
|
||||
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
||||
|
||||
|
||||
|
||||
@ -510,10 +522,10 @@ most real protocols use <a href="https://developers.google.com/protocol-buffers"
|
||||
define their message structures.</p>
|
||||
<p>Here, we'll create a slightly more complex protocol, which parses & generate protobuf
|
||||
messages. Let's start by importing our dependencies, as usual:
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kn">import</span> <span class="n">chronos</span>
|
||||
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">import</span> <span class="n">stew</span><span class="o">/</span><span class="n">results</span> <span class="c"># for Opt[T]</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kn">import</span><span class="w"> </span><span class="n">chronos</span>
|
||||
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">import</span><span class="w"> </span><span class="n">stew</span><span class="o">/</span><span class="n">results</span><span class="w"> </span><span class="c"># for Opt[T]</span>
|
||||
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a>
|
||||
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="kn">import</span> <span class="n">libp2p</span>
|
||||
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="kn">import</span><span class="w"> </span><span class="n">libp2p</span>
|
||||
</code></pre></div></p>
|
||||
<h2 id="protobuf-encoding-decoding">Protobuf encoding & decoding</h2>
|
||||
<p>This will be the structure of our messages:
|
||||
@ -534,50 +546,50 @@ To create the encoders & decoders, we are going to use minprotobuf
|
||||
exists, minprotobuf is currently the recommended method to handle protobuf, since it has
|
||||
been used in production extensively, and audited.
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="k">type</span>
|
||||
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a> <span class="n">Metric</span> <span class="o">=</span> <span class="k">object</span>
|
||||
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a> <span class="n">name</span><span class="p">:</span> <span class="nb">string</span>
|
||||
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a> <span class="n">value</span><span class="p">:</span> <span class="nb">float</span>
|
||||
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="w"> </span><span class="n">Metric</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">object</span>
|
||||
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="w"> </span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="nb">string</span>
|
||||
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="w"> </span><span class="n">value</span><span class="p">:</span><span class="w"> </span><span class="nb">float</span>
|
||||
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a>
|
||||
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a> <span class="n">MetricList</span> <span class="o">=</span> <span class="k">object</span>
|
||||
<a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a> <span class="n">metrics</span><span class="p">:</span> <span class="nb">seq</span><span class="o">[</span><span class="n">Metric</span><span class="o">]</span>
|
||||
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a><span class="w"> </span><span class="n">MetricList</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">object</span>
|
||||
<a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a><span class="w"> </span><span class="n">metrics</span><span class="p">:</span><span class="w"> </span><span class="nb">seq</span><span class="o">[</span><span class="n">Metric</span><span class="o">]</span>
|
||||
<a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a>
|
||||
<a id="__codelineno-2-9" name="__codelineno-2-9" href="#__codelineno-2-9"></a><span class="p">{.</span><span class="n">push</span> <span class="n">raises</span><span class="p">:</span> <span class="o">[]</span><span class="p">.}</span>
|
||||
<a id="__codelineno-2-9" name="__codelineno-2-9" href="#__codelineno-2-9"></a><span class="sx">{.push</span><span class="w"> </span><span class="sx">raises</span>:<span class="w"> </span><span class="sx">[].}</span>
|
||||
<a id="__codelineno-2-10" name="__codelineno-2-10" href="#__codelineno-2-10"></a>
|
||||
<a id="__codelineno-2-11" name="__codelineno-2-11" href="#__codelineno-2-11"></a><span class="k">proc </span><span class="nf">encode</span><span class="p">(</span><span class="n">m</span><span class="p">:</span> <span class="n">Metric</span><span class="p">):</span> <span class="n">ProtoBuffer</span> <span class="o">=</span>
|
||||
<a id="__codelineno-2-12" name="__codelineno-2-12" href="#__codelineno-2-12"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">initProtoBuffer</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-13" name="__codelineno-2-13" href="#__codelineno-2-13"></a> <span class="n">result</span><span class="p">.</span><span class="n">write</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">m</span><span class="p">.</span><span class="n">name</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-14" name="__codelineno-2-14" href="#__codelineno-2-14"></a> <span class="n">result</span><span class="p">.</span><span class="n">write</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">m</span><span class="p">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-15" name="__codelineno-2-15" href="#__codelineno-2-15"></a> <span class="n">result</span><span class="p">.</span><span class="n">finish</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-11" name="__codelineno-2-11" href="#__codelineno-2-11"></a><span class="sx">proc</span><span class="w"> </span><span class="sx">encode(m</span>:<span class="w"> </span><span class="sx">Metric): ProtoBuffer</span><span class="w"> </span><span class="sx">=</span>
|
||||
<a id="__codelineno-2-12" name="__codelineno-2-12" href="#__codelineno-2-12"></a><span class="sx"> result</span><span class="w"> </span><span class="sx">= initProtoBuffer()</span>
|
||||
<a id="__codelineno-2-13" name="__codelineno-2-13" href="#__codelineno-2-13"></a><span class="sx"> result.write(1</span>,<span class="w"> </span><span class="sx">m.name)</span>
|
||||
<a id="__codelineno-2-14" name="__codelineno-2-14" href="#__codelineno-2-14"></a><span class="sx"> result.write(2</span>,<span class="w"> </span><span class="sx">m.value)</span>
|
||||
<a id="__codelineno-2-15" name="__codelineno-2-15" href="#__codelineno-2-15"></a><span class="sx"> result.finish()</span>
|
||||
<a id="__codelineno-2-16" name="__codelineno-2-16" href="#__codelineno-2-16"></a>
|
||||
<a id="__codelineno-2-17" name="__codelineno-2-17" href="#__codelineno-2-17"></a><span class="k">proc </span><span class="nf">decode</span><span class="p">(</span><span class="err">_: type Metric, buf: seq[byte]): Result[Metric, ProtoError] =</span>
|
||||
<a id="__codelineno-2-18" name="__codelineno-2-18" href="#__codelineno-2-18"></a> <span class="kd">var</span> <span class="n">res</span><span class="p">:</span> <span class="n">Metric</span>
|
||||
<a id="__codelineno-2-19" name="__codelineno-2-19" href="#__codelineno-2-19"></a> <span class="k">let</span> <span class="n">pb</span> <span class="o">=</span> <span class="n">initProtoBuffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-20" name="__codelineno-2-20" href="#__codelineno-2-20"></a> <span class="c"># "getField" will return a Result[bool, ProtoError].</span>
|
||||
<a id="__codelineno-2-21" name="__codelineno-2-21" href="#__codelineno-2-21"></a> <span class="c"># The Result will hold an error if the protobuf is invalid.</span>
|
||||
<a id="__codelineno-2-22" name="__codelineno-2-22" href="#__codelineno-2-22"></a> <span class="c"># The Result will hold "false" if the field is missing</span>
|
||||
<a id="__codelineno-2-23" name="__codelineno-2-23" href="#__codelineno-2-23"></a> <span class="c">#</span>
|
||||
<a id="__codelineno-2-24" name="__codelineno-2-24" href="#__codelineno-2-24"></a> <span class="c"># We are just checking the error, and ignoring whether the value</span>
|
||||
<a id="__codelineno-2-25" name="__codelineno-2-25" href="#__codelineno-2-25"></a> <span class="c"># is present or not (default values are valid).</span>
|
||||
<a id="__codelineno-2-26" name="__codelineno-2-26" href="#__codelineno-2-26"></a> <span class="k">discard</span> <span class="o">?</span> <span class="n">pb</span><span class="p">.</span><span class="n">getField</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">res</span><span class="p">.</span><span class="n">name</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-27" name="__codelineno-2-27" href="#__codelineno-2-27"></a> <span class="k">discard</span> <span class="o">?</span> <span class="n">pb</span><span class="p">.</span><span class="n">getField</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">res</span><span class="p">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-28" name="__codelineno-2-28" href="#__codelineno-2-28"></a> <span class="n">ok</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-17" name="__codelineno-2-17" href="#__codelineno-2-17"></a><span class="sx">proc</span><span class="w"> </span><span class="sx">decode(_</span>:<span class="w"> </span><span class="sx">type</span><span class="w"> </span><span class="sx">Metric</span>,<span class="w"> </span><span class="sx">buf</span>:<span class="w"> </span><span class="sx">seq[byte]): Result[Metric</span>,<span class="w"> </span><span class="sx">ProtoError] =</span>
|
||||
<a id="__codelineno-2-18" name="__codelineno-2-18" href="#__codelineno-2-18"></a><span class="sx"> var</span><span class="w"> </span><span class="sx">res</span>:<span class="w"> </span><span class="sx">Metric</span>
|
||||
<a id="__codelineno-2-19" name="__codelineno-2-19" href="#__codelineno-2-19"></a><span class="w"> </span><span class="sx">let</span><span class="w"> </span><span class="sx">pb</span><span class="w"> </span><span class="sx">= initProtoBuffer(buf)</span>
|
||||
<a id="__codelineno-2-20" name="__codelineno-2-20" href="#__codelineno-2-20"></a><span class="sx"> # "getField" will</span><span class="w"> </span><span class="sx">return</span><span class="w"> </span><span class="sx">a</span><span class="w"> </span><span class="sx">Result[bool</span>,<span class="w"> </span><span class="sx">ProtoError].</span>
|
||||
<a id="__codelineno-2-21" name="__codelineno-2-21" href="#__codelineno-2-21"></a><span class="sx"> # The</span><span class="w"> </span><span class="sx">Result</span><span class="w"> </span><span class="sx">will</span><span class="w"> </span><span class="sx">hold</span><span class="w"> </span><span class="sx">an</span><span class="w"> </span><span class="sx">error</span><span class="w"> </span><span class="sx">if</span><span class="w"> </span><span class="sx">the</span><span class="w"> </span><span class="sx">protobuf</span><span class="w"> </span><span class="sx">is</span><span class="w"> </span><span class="sx">invalid.</span>
|
||||
<a id="__codelineno-2-22" name="__codelineno-2-22" href="#__codelineno-2-22"></a><span class="sx"> # The</span><span class="w"> </span><span class="sx">Result</span><span class="w"> </span><span class="sx">will</span><span class="w"> </span><span class="sx">hold</span><span class="w"> </span><span class="sx">"false" if</span><span class="w"> </span><span class="sx">the</span><span class="w"> </span><span class="sx">field</span><span class="w"> </span><span class="sx">is</span><span class="w"> </span><span class="sx">missing</span>
|
||||
<a id="__codelineno-2-23" name="__codelineno-2-23" href="#__codelineno-2-23"></a><span class="w"> </span><span class="sx">#</span>
|
||||
<a id="__codelineno-2-24" name="__codelineno-2-24" href="#__codelineno-2-24"></a><span class="sx"> # We</span><span class="w"> </span><span class="sx">are</span><span class="w"> </span><span class="sx">just</span><span class="w"> </span><span class="sx">checking</span><span class="w"> </span><span class="sx">the</span><span class="w"> </span><span class="sx">error</span>,<span class="w"> </span><span class="sx">and</span><span class="w"> </span><span class="sx">ignoring</span><span class="w"> </span><span class="sx">whether</span><span class="w"> </span><span class="sx">the</span><span class="w"> </span><span class="sx">value</span>
|
||||
<a id="__codelineno-2-25" name="__codelineno-2-25" href="#__codelineno-2-25"></a><span class="w"> </span><span class="sx"># is</span><span class="w"> </span><span class="sx">present</span><span class="w"> </span><span class="sx">or</span><span class="w"> </span><span class="sx">not</span><span class="w"> </span><span class="sx">(default</span><span class="w"> </span><span class="sx">values</span><span class="w"> </span><span class="sx">are</span><span class="w"> </span><span class="sx">valid).</span>
|
||||
<a id="__codelineno-2-26" name="__codelineno-2-26" href="#__codelineno-2-26"></a><span class="sx"> discard</span><span class="w"> </span><span class="sx">? pb.getField(1</span>,<span class="w"> </span><span class="sx">res.name)</span>
|
||||
<a id="__codelineno-2-27" name="__codelineno-2-27" href="#__codelineno-2-27"></a><span class="sx"> discard</span><span class="w"> </span><span class="sx">? pb.getField(2</span>,<span class="w"> </span><span class="sx">res.value)</span>
|
||||
<a id="__codelineno-2-28" name="__codelineno-2-28" href="#__codelineno-2-28"></a><span class="sx"> ok(res)</span>
|
||||
<a id="__codelineno-2-29" name="__codelineno-2-29" href="#__codelineno-2-29"></a>
|
||||
<a id="__codelineno-2-30" name="__codelineno-2-30" href="#__codelineno-2-30"></a><span class="k">proc </span><span class="nf">encode</span><span class="p">(</span><span class="n">m</span><span class="p">:</span> <span class="n">MetricList</span><span class="p">):</span> <span class="n">ProtoBuffer</span> <span class="o">=</span>
|
||||
<a id="__codelineno-2-31" name="__codelineno-2-31" href="#__codelineno-2-31"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">initProtoBuffer</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-32" name="__codelineno-2-32" href="#__codelineno-2-32"></a> <span class="k">for</span> <span class="n">metric</span> <span class="ow">in</span> <span class="n">m</span><span class="p">.</span><span class="n">metrics</span><span class="p">:</span>
|
||||
<a id="__codelineno-2-33" name="__codelineno-2-33" href="#__codelineno-2-33"></a> <span class="n">result</span><span class="p">.</span><span class="n">write</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">metric</span><span class="p">.</span><span class="n">encode</span><span class="p">())</span>
|
||||
<a id="__codelineno-2-34" name="__codelineno-2-34" href="#__codelineno-2-34"></a> <span class="n">result</span><span class="p">.</span><span class="n">finish</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-30" name="__codelineno-2-30" href="#__codelineno-2-30"></a><span class="sx">proc</span><span class="w"> </span><span class="sx">encode(m</span>:<span class="w"> </span><span class="sx">MetricList): ProtoBuffer</span><span class="w"> </span><span class="sx">=</span>
|
||||
<a id="__codelineno-2-31" name="__codelineno-2-31" href="#__codelineno-2-31"></a><span class="sx"> result</span><span class="w"> </span><span class="sx">= initProtoBuffer()</span>
|
||||
<a id="__codelineno-2-32" name="__codelineno-2-32" href="#__codelineno-2-32"></a><span class="sx"> for</span><span class="w"> </span><span class="sx">metric</span><span class="w"> </span><span class="sx">in</span><span class="w"> </span><span class="sx">m.metrics</span>:
|
||||
<a id="__codelineno-2-33" name="__codelineno-2-33" href="#__codelineno-2-33"></a><span class="w"> </span><span class="sx">result.write(1</span>,<span class="w"> </span><span class="sx">metric.encode())</span>
|
||||
<a id="__codelineno-2-34" name="__codelineno-2-34" href="#__codelineno-2-34"></a><span class="sx"> result.finish()</span>
|
||||
<a id="__codelineno-2-35" name="__codelineno-2-35" href="#__codelineno-2-35"></a>
|
||||
<a id="__codelineno-2-36" name="__codelineno-2-36" href="#__codelineno-2-36"></a><span class="k">proc </span><span class="nf">decode</span><span class="p">(</span><span class="err">_: type MetricList, buf: seq[byte]): Result[MetricList, ProtoError] =</span>
|
||||
<a id="__codelineno-2-37" name="__codelineno-2-37" href="#__codelineno-2-37"></a> <span class="kd">var</span>
|
||||
<a id="__codelineno-2-38" name="__codelineno-2-38" href="#__codelineno-2-38"></a> <span class="n">res</span><span class="p">:</span> <span class="n">MetricList</span>
|
||||
<a id="__codelineno-2-39" name="__codelineno-2-39" href="#__codelineno-2-39"></a> <span class="n">metrics</span><span class="p">:</span> <span class="nb">seq</span><span class="o">[</span><span class="nb">seq</span><span class="o">[</span><span class="n">byte</span><span class="o">]]</span>
|
||||
<a id="__codelineno-2-40" name="__codelineno-2-40" href="#__codelineno-2-40"></a> <span class="k">let</span> <span class="n">pb</span> <span class="o">=</span> <span class="n">initProtoBuffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-41" name="__codelineno-2-41" href="#__codelineno-2-41"></a> <span class="k">discard</span> <span class="o">?</span> <span class="n">pb</span><span class="p">.</span><span class="n">getRepeatedField</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">metrics</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-36" name="__codelineno-2-36" href="#__codelineno-2-36"></a><span class="sx">proc</span><span class="w"> </span><span class="sx">decode(_</span>:<span class="w"> </span><span class="sx">type</span><span class="w"> </span><span class="sx">MetricList</span>,<span class="w"> </span><span class="sx">buf</span>:<span class="w"> </span><span class="sx">seq[byte]): Result[MetricList</span>,<span class="w"> </span><span class="sx">ProtoError] =</span>
|
||||
<a id="__codelineno-2-37" name="__codelineno-2-37" href="#__codelineno-2-37"></a><span class="sx"> var</span>
|
||||
<a id="__codelineno-2-38" name="__codelineno-2-38" href="#__codelineno-2-38"></a><span class="w"> </span><span class="sx">res</span>:<span class="w"> </span><span class="sx">MetricList</span>
|
||||
<a id="__codelineno-2-39" name="__codelineno-2-39" href="#__codelineno-2-39"></a><span class="w"> </span><span class="sx">metrics</span>:<span class="w"> </span><span class="sx">seq[seq[byte]]</span>
|
||||
<a id="__codelineno-2-40" name="__codelineno-2-40" href="#__codelineno-2-40"></a><span class="sx"> let</span><span class="w"> </span><span class="sx">pb</span><span class="w"> </span><span class="sx">= initProtoBuffer(buf)</span>
|
||||
<a id="__codelineno-2-41" name="__codelineno-2-41" href="#__codelineno-2-41"></a><span class="sx"> discard</span><span class="w"> </span><span class="sx">? pb.getRepeatedField(1</span>,<span class="w"> </span><span class="sx">metrics)</span>
|
||||
<a id="__codelineno-2-42" name="__codelineno-2-42" href="#__codelineno-2-42"></a>
|
||||
<a id="__codelineno-2-43" name="__codelineno-2-43" href="#__codelineno-2-43"></a> <span class="k">for</span> <span class="n">metric</span> <span class="ow">in</span> <span class="n">metrics</span><span class="p">:</span>
|
||||
<a id="__codelineno-2-44" name="__codelineno-2-44" href="#__codelineno-2-44"></a> <span class="n">res</span><span class="p">.</span><span class="n">metrics</span> <span class="o">&=</span> <span class="o">?</span> <span class="n">Metric</span><span class="p">.</span><span class="n">decode</span><span class="p">(</span><span class="n">metric</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-45" name="__codelineno-2-45" href="#__codelineno-2-45"></a> <span class="n">ok</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-43" name="__codelineno-2-43" href="#__codelineno-2-43"></a><span class="sx"> for</span><span class="w"> </span><span class="sx">metric</span><span class="w"> </span><span class="sx">in</span><span class="w"> </span><span class="sx">metrics</span>:
|
||||
<a id="__codelineno-2-44" name="__codelineno-2-44" href="#__codelineno-2-44"></a><span class="w"> </span><span class="sx">res.metrics</span><span class="w"> </span><span class="sx">&= ? Metric.decode(metric)</span>
|
||||
<a id="__codelineno-2-45" name="__codelineno-2-45" href="#__codelineno-2-45"></a><span class="sx"> ok(res)</span>
|
||||
</code></pre></div></p>
|
||||
<h2 id="results-instead-of-exceptions">Results instead of exceptions</h2>
|
||||
<p>As you can see, this part of the program also uses Results instead of exceptions for error handling.
|
||||
@ -597,60 +609,60 @@ that you may or may not prefer.</p>
|
||||
<h2 id="creating-the-protocol">Creating the protocol</h2>
|
||||
<p>We'll next create a protocol, like in the last tutorial, to request these metrics from our host
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="k">type</span>
|
||||
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a> <span class="n">MetricCallback</span> <span class="o">=</span> <span class="k">proc</span><span class="p">:</span> <span class="n">Future</span><span class="o">[</span><span class="n">MetricList</span><span class="o">]</span> <span class="p">{.</span><span class="n">raises</span><span class="p">:</span> <span class="o">[]</span><span class="p">,</span> <span class="n">gcsafe</span><span class="p">.}</span>
|
||||
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a> <span class="n">MetricProto</span> <span class="o">=</span> <span class="k">ref</span> <span class="k">object</span> <span class="k">of</span> <span class="n">LPProtocol</span>
|
||||
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a> <span class="n">metricGetter</span><span class="p">:</span> <span class="n">MetricCallback</span>
|
||||
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a><span class="w"> </span><span class="n">MetricCallback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">proc</span><span class="p">:</span><span class="w"> </span><span class="n">Future</span><span class="o">[</span><span class="n">MetricList</span><span class="o">]</span><span class="w"> </span><span class="sx">{.raises</span>:<span class="w"> </span><span class="sx">[], gcsafe.}</span>
|
||||
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="w"> </span><span class="n">MetricProto</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">ref</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="n">LPProtocol</span>
|
||||
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a><span class="w"> </span><span class="n">metricGetter</span><span class="p">:</span><span class="w"> </span><span class="n">MetricCallback</span>
|
||||
<a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a>
|
||||
<a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a><span class="k">proc </span><span class="nf">new</span><span class="p">(</span><span class="err">_: typedesc[MetricProto], cb: MetricCallback): MetricProto =</span>
|
||||
<a id="__codelineno-3-7" name="__codelineno-3-7" href="#__codelineno-3-7"></a> <span class="k">let</span> <span class="n">res</span> <span class="o">=</span> <span class="n">MetricProto</span><span class="p">(</span><span class="n">metricGetter</span><span class="p">:</span> <span class="n">cb</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-8" name="__codelineno-3-8" href="#__codelineno-3-8"></a> <span class="k">proc </span><span class="nf">handle</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span> <span class="n">Connection</span><span class="p">,</span> <span class="n">proto</span><span class="p">:</span> <span class="nb">string</span><span class="p">)</span> <span class="p">{.</span><span class="n">async</span><span class="p">,</span> <span class="n">gcsafe</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-3-9" name="__codelineno-3-9" href="#__codelineno-3-9"></a> <span class="k">let</span>
|
||||
<a id="__codelineno-3-10" name="__codelineno-3-10" href="#__codelineno-3-10"></a> <span class="n">metrics</span> <span class="o">=</span> <span class="n">await</span> <span class="n">res</span><span class="p">.</span><span class="n">metricGetter</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-11" name="__codelineno-3-11" href="#__codelineno-3-11"></a> <span class="n">asProtobuf</span> <span class="o">=</span> <span class="n">metrics</span><span class="p">.</span><span class="n">encode</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-12" name="__codelineno-3-12" href="#__codelineno-3-12"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="n">asProtobuf</span><span class="p">.</span><span class="n">buffer</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-13" name="__codelineno-3-13" href="#__codelineno-3-13"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a><span class="k">proc</span><span class="w"> </span><span class="nf">new</span><span class="p">(</span><span class="err">_: typedesc[MetricProto], cb: MetricCallback): MetricProto =</span>
|
||||
<a id="__codelineno-3-7" name="__codelineno-3-7" href="#__codelineno-3-7"></a><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="n">res</span><span class="p">:</span><span class="w"> </span><span class="n">MetricProto</span>
|
||||
<a id="__codelineno-3-8" name="__codelineno-3-8" href="#__codelineno-3-8"></a><span class="w"> </span><span class="k">proc</span><span class="w"> </span><span class="nf">handle</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span><span class="w"> </span><span class="n">Connection</span><span class="p">,</span><span class="w"> </span><span class="n">proto</span><span class="p">:</span><span class="w"> </span><span class="nb">string</span><span class="p">)</span><span class="w"> </span><span class="sx">{.async</span>,<span class="w"> </span><span class="sx">gcsafe.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-3-9" name="__codelineno-3-9" href="#__codelineno-3-9"></a><span class="w"> </span><span class="k">let</span>
|
||||
<a id="__codelineno-3-10" name="__codelineno-3-10" href="#__codelineno-3-10"></a><span class="w"> </span><span class="n">metrics</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">res</span><span class="p">.</span><span class="n">metricGetter</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-11" name="__codelineno-3-11" href="#__codelineno-3-11"></a><span class="w"> </span><span class="n">asProtobuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">metrics</span><span class="p">.</span><span class="n">encode</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-12" name="__codelineno-3-12" href="#__codelineno-3-12"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="n">asProtobuf</span><span class="p">.</span><span class="n">buffer</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-13" name="__codelineno-3-13" href="#__codelineno-3-13"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-14" name="__codelineno-3-14" href="#__codelineno-3-14"></a>
|
||||
<a id="__codelineno-3-15" name="__codelineno-3-15" href="#__codelineno-3-15"></a> <span class="n">res</span><span class="p">.</span><span class="n">codecs</span> <span class="o">=</span> <span class="o">@[</span><span class="s">"/metric-getter/1.0.0"</span><span class="o">]</span>
|
||||
<a id="__codelineno-3-16" name="__codelineno-3-16" href="#__codelineno-3-16"></a> <span class="n">res</span><span class="p">.</span><span class="n">handler</span> <span class="o">=</span> <span class="n">handle</span>
|
||||
<a id="__codelineno-3-17" name="__codelineno-3-17" href="#__codelineno-3-17"></a> <span class="k">return</span> <span class="n">res</span>
|
||||
<a id="__codelineno-3-15" name="__codelineno-3-15" href="#__codelineno-3-15"></a><span class="w"> </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MetricProto</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="o">@[</span><span class="s">"/metric-getter/1.0.0"</span><span class="o">]</span><span class="p">,</span><span class="w"> </span><span class="n">handle</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-16" name="__codelineno-3-16" href="#__codelineno-3-16"></a><span class="w"> </span><span class="n">res</span><span class="p">.</span><span class="n">metricGetter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cb</span>
|
||||
<a id="__codelineno-3-17" name="__codelineno-3-17" href="#__codelineno-3-17"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">res</span>
|
||||
<a id="__codelineno-3-18" name="__codelineno-3-18" href="#__codelineno-3-18"></a>
|
||||
<a id="__codelineno-3-19" name="__codelineno-3-19" href="#__codelineno-3-19"></a><span class="k">proc </span><span class="nf">fetch</span><span class="p">(</span><span class="n">p</span><span class="p">:</span> <span class="n">MetricProto</span><span class="p">,</span> <span class="n">conn</span><span class="p">:</span> <span class="n">Connection</span><span class="p">):</span> <span class="n">Future</span><span class="o">[</span><span class="n">MetricList</span><span class="o">]</span> <span class="p">{.</span><span class="n">async</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-3-20" name="__codelineno-3-20" href="#__codelineno-3-20"></a> <span class="k">let</span> <span class="n">protobuf</span> <span class="o">=</span> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">2048</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-21" name="__codelineno-3-21" href="#__codelineno-3-21"></a> <span class="c"># tryGet will raise an exception if the Result contains an error.</span>
|
||||
<a id="__codelineno-3-22" name="__codelineno-3-22" href="#__codelineno-3-22"></a> <span class="c"># It's useful to bridge between exception-world and result-world</span>
|
||||
<a id="__codelineno-3-23" name="__codelineno-3-23" href="#__codelineno-3-23"></a> <span class="k">return</span> <span class="n">MetricList</span><span class="p">.</span><span class="n">decode</span><span class="p">(</span><span class="n">protobuf</span><span class="p">).</span><span class="n">tryGet</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-19" name="__codelineno-3-19" href="#__codelineno-3-19"></a><span class="k">proc</span><span class="w"> </span><span class="nf">fetch</span><span class="p">(</span><span class="n">p</span><span class="p">:</span><span class="w"> </span><span class="n">MetricProto</span><span class="p">,</span><span class="w"> </span><span class="n">conn</span><span class="p">:</span><span class="w"> </span><span class="n">Connection</span><span class="p">):</span><span class="w"> </span><span class="n">Future</span><span class="o">[</span><span class="n">MetricList</span><span class="o">]</span><span class="w"> </span><span class="sx">{.async.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-3-20" name="__codelineno-3-20" href="#__codelineno-3-20"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">protobuf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">2048</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-21" name="__codelineno-3-21" href="#__codelineno-3-21"></a><span class="w"> </span><span class="c"># tryGet will raise an exception if the Result contains an error.</span>
|
||||
<a id="__codelineno-3-22" name="__codelineno-3-22" href="#__codelineno-3-22"></a><span class="w"> </span><span class="c"># It's useful to bridge between exception-world and result-world</span>
|
||||
<a id="__codelineno-3-23" name="__codelineno-3-23" href="#__codelineno-3-23"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">MetricList</span><span class="p">.</span><span class="n">decode</span><span class="p">(</span><span class="n">protobuf</span><span class="p">).</span><span class="n">tryGet</span><span class="p">()</span>
|
||||
</code></pre></div>
|
||||
We can now create our main procedure:
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="k">proc </span><span class="nf">main</span><span class="p">()</span> <span class="p">{.</span><span class="n">async</span><span class="p">,</span> <span class="n">gcsafe</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a> <span class="k">let</span> <span class="n">rng</span> <span class="o">=</span> <span class="n">newRng</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a> <span class="k">proc </span><span class="nf">randomMetricGenerator</span><span class="p">:</span> <span class="n">Future</span><span class="o">[</span><span class="n">MetricList</span><span class="o">]</span> <span class="p">{.</span><span class="n">async</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a> <span class="k">let</span> <span class="n">metricCount</span> <span class="o">=</span> <span class="n">rng</span><span class="o">[]</span><span class="p">.</span><span class="n">generate</span><span class="p">(</span><span class="n">uint32</span><span class="p">)</span> <span class="ow">mod</span> <span class="mi">16</span>
|
||||
<a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="mi">0</span> <span class="p">..</span><span class="o"><</span> <span class="n">metricCount</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:</span>
|
||||
<a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a> <span class="n">result</span><span class="p">.</span><span class="n">metrics</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">Metric</span><span class="p">(</span>
|
||||
<a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a> <span class="n">name</span><span class="p">:</span> <span class="s">"metric_"</span> <span class="o">&</span> <span class="o">$</span><span class="n">i</span><span class="p">,</span>
|
||||
<a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a> <span class="n">value</span><span class="p">:</span> <span class="nb">float</span><span class="p">(</span><span class="n">rng</span><span class="o">[]</span><span class="p">.</span><span class="n">generate</span><span class="p">(</span><span class="n">uint16</span><span class="p">))</span> <span class="o">/</span> <span class="mf">1000.0</span>
|
||||
<a id="__codelineno-4-9" name="__codelineno-4-9" href="#__codelineno-4-9"></a> <span class="p">))</span>
|
||||
<a id="__codelineno-4-10" name="__codelineno-4-10" href="#__codelineno-4-10"></a> <span class="k">return</span> <span class="n">result</span>
|
||||
<a id="__codelineno-4-11" name="__codelineno-4-11" href="#__codelineno-4-11"></a> <span class="k">let</span>
|
||||
<a id="__codelineno-4-12" name="__codelineno-4-12" href="#__codelineno-4-12"></a> <span class="n">metricProto1</span> <span class="o">=</span> <span class="n">MetricProto</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">randomMetricGenerator</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-13" name="__codelineno-4-13" href="#__codelineno-4-13"></a> <span class="n">metricProto2</span> <span class="o">=</span> <span class="n">MetricProto</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">randomMetricGenerator</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-14" name="__codelineno-4-14" href="#__codelineno-4-14"></a> <span class="n">switch1</span> <span class="o">=</span> <span class="n">newStandardSwitch</span><span class="p">(</span><span class="n">rng</span><span class="o">=</span><span class="n">rng</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-15" name="__codelineno-4-15" href="#__codelineno-4-15"></a> <span class="n">switch2</span> <span class="o">=</span> <span class="n">newStandardSwitch</span><span class="p">(</span><span class="n">rng</span><span class="o">=</span><span class="n">rng</span><span class="p">)</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="k">proc</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="sx">{.async</span>,<span class="w"> </span><span class="sx">gcsafe.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">rng</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newRng</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="w"> </span><span class="k">proc</span><span class="w"> </span><span class="nf">randomMetricGenerator</span><span class="p">:</span><span class="w"> </span><span class="n">Future</span><span class="o">[</span><span class="n">MetricList</span><span class="o">]</span><span class="w"> </span><span class="sx">{.async.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">metricCount</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rng</span><span class="o">[]</span><span class="p">.</span><span class="n">generate</span><span class="p">(</span><span class="n">uint32</span><span class="p">)</span><span class="w"> </span><span class="ow">mod</span><span class="w"> </span><span class="mi">16</span>
|
||||
<a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">..</span><span class="o"><</span><span class="w"> </span><span class="n">metricCount</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">:</span>
|
||||
<a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a><span class="w"> </span><span class="n">result</span><span class="p">.</span><span class="n">metrics</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">Metric</span><span class="p">(</span>
|
||||
<a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a><span class="w"> </span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="s">"metric_"</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="o">$</span><span class="n">i</span><span class="p">,</span>
|
||||
<a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a><span class="w"> </span><span class="n">value</span><span class="p">:</span><span class="w"> </span><span class="nb">float</span><span class="p">(</span><span class="n">rng</span><span class="o">[]</span><span class="p">.</span><span class="n">generate</span><span class="p">(</span><span class="n">uint16</span><span class="p">))</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mf">1000.0</span>
|
||||
<a id="__codelineno-4-9" name="__codelineno-4-9" href="#__codelineno-4-9"></a><span class="w"> </span><span class="p">))</span>
|
||||
<a id="__codelineno-4-10" name="__codelineno-4-10" href="#__codelineno-4-10"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">result</span>
|
||||
<a id="__codelineno-4-11" name="__codelineno-4-11" href="#__codelineno-4-11"></a><span class="w"> </span><span class="k">let</span>
|
||||
<a id="__codelineno-4-12" name="__codelineno-4-12" href="#__codelineno-4-12"></a><span class="w"> </span><span class="n">metricProto1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MetricProto</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">randomMetricGenerator</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-13" name="__codelineno-4-13" href="#__codelineno-4-13"></a><span class="w"> </span><span class="n">metricProto2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MetricProto</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">randomMetricGenerator</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-14" name="__codelineno-4-14" href="#__codelineno-4-14"></a><span class="w"> </span><span class="n">switch1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newStandardSwitch</span><span class="p">(</span><span class="n">rng</span><span class="o">=</span><span class="n">rng</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-15" name="__codelineno-4-15" href="#__codelineno-4-15"></a><span class="w"> </span><span class="n">switch2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newStandardSwitch</span><span class="p">(</span><span class="n">rng</span><span class="o">=</span><span class="n">rng</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-16" name="__codelineno-4-16" href="#__codelineno-4-16"></a>
|
||||
<a id="__codelineno-4-17" name="__codelineno-4-17" href="#__codelineno-4-17"></a> <span class="n">switch1</span><span class="p">.</span><span class="n">mount</span><span class="p">(</span><span class="n">metricProto1</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-17" name="__codelineno-4-17" href="#__codelineno-4-17"></a><span class="w"> </span><span class="n">switch1</span><span class="p">.</span><span class="n">mount</span><span class="p">(</span><span class="n">metricProto1</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-18" name="__codelineno-4-18" href="#__codelineno-4-18"></a>
|
||||
<a id="__codelineno-4-19" name="__codelineno-4-19" href="#__codelineno-4-19"></a> <span class="n">await</span> <span class="n">switch1</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-20" name="__codelineno-4-20" href="#__codelineno-4-20"></a> <span class="n">await</span> <span class="n">switch2</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-19" name="__codelineno-4-19" href="#__codelineno-4-19"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">switch1</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-20" name="__codelineno-4-20" href="#__codelineno-4-20"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">switch2</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-21" name="__codelineno-4-21" href="#__codelineno-4-21"></a>
|
||||
<a id="__codelineno-4-22" name="__codelineno-4-22" href="#__codelineno-4-22"></a> <span class="k">let</span>
|
||||
<a id="__codelineno-4-23" name="__codelineno-4-23" href="#__codelineno-4-23"></a> <span class="n">conn</span> <span class="o">=</span> <span class="n">await</span> <span class="n">switch2</span><span class="p">.</span><span class="n">dial</span><span class="p">(</span><span class="n">switch1</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">,</span> <span class="n">switch1</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">addrs</span><span class="p">,</span> <span class="n">metricProto2</span><span class="p">.</span><span class="n">codecs</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-24" name="__codelineno-4-24" href="#__codelineno-4-24"></a> <span class="n">metrics</span> <span class="o">=</span> <span class="n">await</span> <span class="n">metricProto2</span><span class="p">.</span><span class="n">fetch</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-25" name="__codelineno-4-25" href="#__codelineno-4-25"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-22" name="__codelineno-4-22" href="#__codelineno-4-22"></a><span class="w"> </span><span class="k">let</span>
|
||||
<a id="__codelineno-4-23" name="__codelineno-4-23" href="#__codelineno-4-23"></a><span class="w"> </span><span class="n">conn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">switch2</span><span class="p">.</span><span class="n">dial</span><span class="p">(</span><span class="n">switch1</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">,</span><span class="w"> </span><span class="n">switch1</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">addrs</span><span class="p">,</span><span class="w"> </span><span class="n">metricProto2</span><span class="p">.</span><span class="n">codecs</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-24" name="__codelineno-4-24" href="#__codelineno-4-24"></a><span class="w"> </span><span class="n">metrics</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">metricProto2</span><span class="p">.</span><span class="n">fetch</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
||||
<a id="__codelineno-4-25" name="__codelineno-4-25" href="#__codelineno-4-25"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<a id="__codelineno-4-26" name="__codelineno-4-26" href="#__codelineno-4-26"></a>
|
||||
<a id="__codelineno-4-27" name="__codelineno-4-27" href="#__codelineno-4-27"></a> <span class="k">for</span> <span class="n">metric</span> <span class="ow">in</span> <span class="n">metrics</span><span class="p">.</span><span class="n">metrics</span><span class="p">:</span>
|
||||
<a id="__codelineno-4-28" name="__codelineno-4-28" href="#__codelineno-4-28"></a> <span class="n">echo</span> <span class="n">metric</span><span class="p">.</span><span class="n">name</span><span class="p">,</span> <span class="s">" = "</span><span class="p">,</span> <span class="n">metric</span><span class="p">.</span><span class="n">value</span>
|
||||
<a id="__codelineno-4-27" name="__codelineno-4-27" href="#__codelineno-4-27"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">metric</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">metrics</span><span class="p">.</span><span class="n">metrics</span><span class="p">:</span>
|
||||
<a id="__codelineno-4-28" name="__codelineno-4-28" href="#__codelineno-4-28"></a><span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="n">metric</span><span class="p">.</span><span class="n">name</span><span class="p">,</span><span class="w"> </span><span class="s">" = "</span><span class="p">,</span><span class="w"> </span><span class="n">metric</span><span class="p">.</span><span class="n">value</span>
|
||||
<a id="__codelineno-4-29" name="__codelineno-4-29" href="#__codelineno-4-29"></a>
|
||||
<a id="__codelineno-4-30" name="__codelineno-4-30" href="#__codelineno-4-30"></a> <span class="n">await</span> <span class="n">allFutures</span><span class="p">(</span><span class="n">switch1</span><span class="p">.</span><span class="n">stop</span><span class="p">(),</span> <span class="n">switch2</span><span class="p">.</span><span class="n">stop</span><span class="p">())</span> <span class="c"># close connections and shutdown all transports</span>
|
||||
<a id="__codelineno-4-30" name="__codelineno-4-30" href="#__codelineno-4-30"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">allFutures</span><span class="p">(</span><span class="n">switch1</span><span class="p">.</span><span class="n">stop</span><span class="p">(),</span><span class="w"> </span><span class="n">switch2</span><span class="p">.</span><span class="n">stop</span><span class="p">())</span><span class="w"> </span><span class="c"># close connections and shutdown all transports</span>
|
||||
<a id="__codelineno-4-31" name="__codelineno-4-31" href="#__codelineno-4-31"></a>
|
||||
<a id="__codelineno-4-32" name="__codelineno-4-32" href="#__codelineno-4-32"></a><span class="n">waitFor</span><span class="p">(</span><span class="n">main</span><span class="p">())</span>
|
||||
</code></pre></div>
|
||||
@ -671,42 +683,6 @@ If you run this program, you should see random metrics being sent from the switc
|
||||
|
||||
<footer class="md-footer">
|
||||
|
||||
|
||||
<nav class="md-footer__inner md-grid" aria-label="Footer" >
|
||||
|
||||
|
||||
<a href="../tutorial_2_customproto/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Create a custom protocol" rel="prev">
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
||||
</div>
|
||||
<div class="md-footer__title">
|
||||
<div class="md-ellipsis">
|
||||
<span class="md-footer__direction">
|
||||
Previous
|
||||
</span>
|
||||
Create a custom protocol
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a href="../tutorial_4_gossipsub/" class="md-footer__link md-footer__link--next" aria-label="Next: GossipSub" rel="next">
|
||||
<div class="md-footer__title">
|
||||
<div class="md-ellipsis">
|
||||
<span class="md-footer__direction">
|
||||
Next
|
||||
</span>
|
||||
GossipSub
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
</nav>
|
||||
|
||||
<div class="md-footer-meta md-typeset">
|
||||
<div class="md-footer-meta__inner md-grid">
|
||||
<div class="md-copyright">
|
||||
@ -728,10 +704,10 @@ If you run this program, you should see random metrics being sent from the switc
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.instant", "search.highlight"], "search": "../assets/javascripts/workers/search.16e2a7d4.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script>
|
||||
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.instant", "search.highlight"], "search": "../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.8492ddcf.min.js"></script>
|
||||
<script src="../assets/javascripts/bundle.b4d07000.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
@ -10,8 +10,14 @@
|
||||
|
||||
<link rel="canonical" href="https://status-im.github.io/nim-libp2p/docs/tutorial_4_gossipsub/">
|
||||
|
||||
<link rel="icon" href="https://docs.libp2p.io/images/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.1, mkdocs-material-8.5.7">
|
||||
|
||||
<link rel="prev" href="../tutorial_3_protobuf/">
|
||||
|
||||
|
||||
<link rel="next" href="../tutorial_5_discovery/">
|
||||
|
||||
<link rel="icon" href="https://libp2p.io/img/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.15">
|
||||
|
||||
|
||||
|
||||
@ -19,11 +25,10 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.20d9efc8.min.css">
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.26e3688c.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/palette.cbb835fc.min.css">
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/palette.ecc896b0.min.css">
|
||||
|
||||
|
||||
|
||||
@ -56,7 +61,7 @@
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="">
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
|
||||
@ -80,11 +85,13 @@
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
|
||||
|
||||
<header class="md-header md-header--shadow" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href=".." title="nim-libp2p" class="md-header__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
@ -107,27 +114,31 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
</form>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -157,7 +168,7 @@
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list"></ol>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -169,7 +180,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -203,7 +214,7 @@
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href=".." title="nim-libp2p" class="md-nav__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
nim-libp2p
|
||||
@ -213,7 +224,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -236,17 +247,18 @@
|
||||
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_1" type="checkbox" id="__nav_1" checked>
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" checked>
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_1">
|
||||
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
|
||||
Tutorials
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" aria-label="Tutorials" data-md-level="1">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_1">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Tutorials
|
||||
@ -318,7 +330,7 @@
|
||||
|
||||
<li class="md-nav__item md-nav__item--active">
|
||||
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
|
||||
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
||||
|
||||
|
||||
|
||||
@ -486,128 +498,128 @@ privacy and attack resistance.</p>
|
||||
of parameters you can tweak to adjust how GossipSub behaves but here we'll
|
||||
use the sane defaults shipped with libp2p.</p>
|
||||
<p>We'll start by creating our metric structure like previously
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kn">import</span> <span class="n">chronos</span>
|
||||
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">import</span> <span class="n">stew</span><span class="o">/</span><span class="n">results</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kn">import</span><span class="w"> </span><span class="n">chronos</span>
|
||||
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">import</span><span class="w"> </span><span class="n">stew</span><span class="o">/</span><span class="n">results</span>
|
||||
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a>
|
||||
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="kn">import</span> <span class="n">libp2p</span>
|
||||
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="kn">import</span> <span class="n">libp2p</span><span class="o">/</span><span class="n">protocols</span><span class="o">/</span><span class="n">pubsub</span><span class="o">/</span><span class="n">rpc</span><span class="o">/</span><span class="n">messages</span>
|
||||
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="kn">import</span><span class="w"> </span><span class="n">libp2p</span>
|
||||
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="kn">import</span><span class="w"> </span><span class="n">libp2p</span><span class="o">/</span><span class="n">protocols</span><span class="o">/</span><span class="n">pubsub</span><span class="o">/</span><span class="n">rpc</span><span class="o">/</span><span class="n">messages</span>
|
||||
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a>
|
||||
<a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="k">type</span>
|
||||
<a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a> <span class="n">Metric</span> <span class="o">=</span> <span class="k">object</span>
|
||||
<a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a> <span class="n">name</span><span class="p">:</span> <span class="nb">string</span>
|
||||
<a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a> <span class="n">value</span><span class="p">:</span> <span class="nb">float</span>
|
||||
<a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="w"> </span><span class="n">Metric</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">object</span>
|
||||
<a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a><span class="w"> </span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="nb">string</span>
|
||||
<a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a><span class="w"> </span><span class="n">value</span><span class="p">:</span><span class="w"> </span><span class="nb">float</span>
|
||||
<a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a>
|
||||
<a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a> <span class="n">MetricList</span> <span class="o">=</span> <span class="k">object</span>
|
||||
<a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a> <span class="n">hostname</span><span class="p">:</span> <span class="nb">string</span>
|
||||
<a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a> <span class="n">metrics</span><span class="p">:</span> <span class="nb">seq</span><span class="o">[</span><span class="n">Metric</span><span class="o">]</span>
|
||||
<a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a><span class="w"> </span><span class="n">MetricList</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">object</span>
|
||||
<a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a><span class="w"> </span><span class="n">hostname</span><span class="p">:</span><span class="w"> </span><span class="nb">string</span>
|
||||
<a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a><span class="w"> </span><span class="n">metrics</span><span class="p">:</span><span class="w"> </span><span class="nb">seq</span><span class="o">[</span><span class="n">Metric</span><span class="o">]</span>
|
||||
<a id="__codelineno-0-15" name="__codelineno-0-15" href="#__codelineno-0-15"></a>
|
||||
<a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a><span class="p">{.</span><span class="n">push</span> <span class="n">raises</span><span class="p">:</span> <span class="o">[]</span><span class="p">.}</span>
|
||||
<a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a><span class="sx">{.push</span><span class="w"> </span><span class="sx">raises</span>:<span class="w"> </span><span class="sx">[].}</span>
|
||||
<a id="__codelineno-0-17" name="__codelineno-0-17" href="#__codelineno-0-17"></a>
|
||||
<a id="__codelineno-0-18" name="__codelineno-0-18" href="#__codelineno-0-18"></a><span class="k">proc </span><span class="nf">encode</span><span class="p">(</span><span class="n">m</span><span class="p">:</span> <span class="n">Metric</span><span class="p">):</span> <span class="n">ProtoBuffer</span> <span class="o">=</span>
|
||||
<a id="__codelineno-0-19" name="__codelineno-0-19" href="#__codelineno-0-19"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">initProtoBuffer</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-20" name="__codelineno-0-20" href="#__codelineno-0-20"></a> <span class="n">result</span><span class="p">.</span><span class="n">write</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">m</span><span class="p">.</span><span class="n">name</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-21" name="__codelineno-0-21" href="#__codelineno-0-21"></a> <span class="n">result</span><span class="p">.</span><span class="n">write</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">m</span><span class="p">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-22" name="__codelineno-0-22" href="#__codelineno-0-22"></a> <span class="n">result</span><span class="p">.</span><span class="n">finish</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-18" name="__codelineno-0-18" href="#__codelineno-0-18"></a><span class="sx">proc</span><span class="w"> </span><span class="sx">encode(m</span>:<span class="w"> </span><span class="sx">Metric): ProtoBuffer</span><span class="w"> </span><span class="sx">=</span>
|
||||
<a id="__codelineno-0-19" name="__codelineno-0-19" href="#__codelineno-0-19"></a><span class="sx"> result</span><span class="w"> </span><span class="sx">= initProtoBuffer()</span>
|
||||
<a id="__codelineno-0-20" name="__codelineno-0-20" href="#__codelineno-0-20"></a><span class="sx"> result.write(1</span>,<span class="w"> </span><span class="sx">m.name)</span>
|
||||
<a id="__codelineno-0-21" name="__codelineno-0-21" href="#__codelineno-0-21"></a><span class="sx"> result.write(2</span>,<span class="w"> </span><span class="sx">m.value)</span>
|
||||
<a id="__codelineno-0-22" name="__codelineno-0-22" href="#__codelineno-0-22"></a><span class="sx"> result.finish()</span>
|
||||
<a id="__codelineno-0-23" name="__codelineno-0-23" href="#__codelineno-0-23"></a>
|
||||
<a id="__codelineno-0-24" name="__codelineno-0-24" href="#__codelineno-0-24"></a><span class="k">proc </span><span class="nf">decode</span><span class="p">(</span><span class="err">_: type Metric, buf: seq[byte]): Result[Metric, ProtoError] =</span>
|
||||
<a id="__codelineno-0-25" name="__codelineno-0-25" href="#__codelineno-0-25"></a> <span class="kd">var</span> <span class="n">res</span><span class="p">:</span> <span class="n">Metric</span>
|
||||
<a id="__codelineno-0-26" name="__codelineno-0-26" href="#__codelineno-0-26"></a> <span class="k">let</span> <span class="n">pb</span> <span class="o">=</span> <span class="n">initProtoBuffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-27" name="__codelineno-0-27" href="#__codelineno-0-27"></a> <span class="k">discard</span> <span class="o">?</span> <span class="n">pb</span><span class="p">.</span><span class="n">getField</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">res</span><span class="p">.</span><span class="n">name</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-28" name="__codelineno-0-28" href="#__codelineno-0-28"></a> <span class="k">discard</span> <span class="o">?</span> <span class="n">pb</span><span class="p">.</span><span class="n">getField</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">res</span><span class="p">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-29" name="__codelineno-0-29" href="#__codelineno-0-29"></a> <span class="n">ok</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-24" name="__codelineno-0-24" href="#__codelineno-0-24"></a><span class="sx">proc</span><span class="w"> </span><span class="sx">decode(_</span>:<span class="w"> </span><span class="sx">type</span><span class="w"> </span><span class="sx">Metric</span>,<span class="w"> </span><span class="sx">buf</span>:<span class="w"> </span><span class="sx">seq[byte]): Result[Metric</span>,<span class="w"> </span><span class="sx">ProtoError] =</span>
|
||||
<a id="__codelineno-0-25" name="__codelineno-0-25" href="#__codelineno-0-25"></a><span class="sx"> var</span><span class="w"> </span><span class="sx">res</span>:<span class="w"> </span><span class="sx">Metric</span>
|
||||
<a id="__codelineno-0-26" name="__codelineno-0-26" href="#__codelineno-0-26"></a><span class="w"> </span><span class="sx">let</span><span class="w"> </span><span class="sx">pb</span><span class="w"> </span><span class="sx">= initProtoBuffer(buf)</span>
|
||||
<a id="__codelineno-0-27" name="__codelineno-0-27" href="#__codelineno-0-27"></a><span class="sx"> discard</span><span class="w"> </span><span class="sx">? pb.getField(1</span>,<span class="w"> </span><span class="sx">res.name)</span>
|
||||
<a id="__codelineno-0-28" name="__codelineno-0-28" href="#__codelineno-0-28"></a><span class="sx"> discard</span><span class="w"> </span><span class="sx">? pb.getField(2</span>,<span class="w"> </span><span class="sx">res.value)</span>
|
||||
<a id="__codelineno-0-29" name="__codelineno-0-29" href="#__codelineno-0-29"></a><span class="sx"> ok(res)</span>
|
||||
<a id="__codelineno-0-30" name="__codelineno-0-30" href="#__codelineno-0-30"></a>
|
||||
<a id="__codelineno-0-31" name="__codelineno-0-31" href="#__codelineno-0-31"></a><span class="k">proc </span><span class="nf">encode</span><span class="p">(</span><span class="n">m</span><span class="p">:</span> <span class="n">MetricList</span><span class="p">):</span> <span class="n">ProtoBuffer</span> <span class="o">=</span>
|
||||
<a id="__codelineno-0-32" name="__codelineno-0-32" href="#__codelineno-0-32"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">initProtoBuffer</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-33" name="__codelineno-0-33" href="#__codelineno-0-33"></a> <span class="k">for</span> <span class="n">metric</span> <span class="ow">in</span> <span class="n">m</span><span class="p">.</span><span class="n">metrics</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-34" name="__codelineno-0-34" href="#__codelineno-0-34"></a> <span class="n">result</span><span class="p">.</span><span class="n">write</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">metric</span><span class="p">.</span><span class="n">encode</span><span class="p">())</span>
|
||||
<a id="__codelineno-0-35" name="__codelineno-0-35" href="#__codelineno-0-35"></a> <span class="n">result</span><span class="p">.</span><span class="n">write</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">m</span><span class="p">.</span><span class="n">hostname</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-36" name="__codelineno-0-36" href="#__codelineno-0-36"></a> <span class="n">result</span><span class="p">.</span><span class="n">finish</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-31" name="__codelineno-0-31" href="#__codelineno-0-31"></a><span class="sx">proc</span><span class="w"> </span><span class="sx">encode(m</span>:<span class="w"> </span><span class="sx">MetricList): ProtoBuffer</span><span class="w"> </span><span class="sx">=</span>
|
||||
<a id="__codelineno-0-32" name="__codelineno-0-32" href="#__codelineno-0-32"></a><span class="sx"> result</span><span class="w"> </span><span class="sx">= initProtoBuffer()</span>
|
||||
<a id="__codelineno-0-33" name="__codelineno-0-33" href="#__codelineno-0-33"></a><span class="sx"> for</span><span class="w"> </span><span class="sx">metric</span><span class="w"> </span><span class="sx">in</span><span class="w"> </span><span class="sx">m.metrics</span>:
|
||||
<a id="__codelineno-0-34" name="__codelineno-0-34" href="#__codelineno-0-34"></a><span class="w"> </span><span class="sx">result.write(1</span>,<span class="w"> </span><span class="sx">metric.encode())</span>
|
||||
<a id="__codelineno-0-35" name="__codelineno-0-35" href="#__codelineno-0-35"></a><span class="sx"> result.write(2</span>,<span class="w"> </span><span class="sx">m.hostname)</span>
|
||||
<a id="__codelineno-0-36" name="__codelineno-0-36" href="#__codelineno-0-36"></a><span class="sx"> result.finish()</span>
|
||||
<a id="__codelineno-0-37" name="__codelineno-0-37" href="#__codelineno-0-37"></a>
|
||||
<a id="__codelineno-0-38" name="__codelineno-0-38" href="#__codelineno-0-38"></a><span class="k">proc </span><span class="nf">decode</span><span class="p">(</span><span class="err">_: type MetricList, buf: seq[byte]): Result[MetricList, ProtoError] =</span>
|
||||
<a id="__codelineno-0-39" name="__codelineno-0-39" href="#__codelineno-0-39"></a> <span class="kd">var</span>
|
||||
<a id="__codelineno-0-40" name="__codelineno-0-40" href="#__codelineno-0-40"></a> <span class="n">res</span><span class="p">:</span> <span class="n">MetricList</span>
|
||||
<a id="__codelineno-0-41" name="__codelineno-0-41" href="#__codelineno-0-41"></a> <span class="n">metrics</span><span class="p">:</span> <span class="nb">seq</span><span class="o">[</span><span class="nb">seq</span><span class="o">[</span><span class="n">byte</span><span class="o">]]</span>
|
||||
<a id="__codelineno-0-42" name="__codelineno-0-42" href="#__codelineno-0-42"></a> <span class="k">let</span> <span class="n">pb</span> <span class="o">=</span> <span class="n">initProtoBuffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-43" name="__codelineno-0-43" href="#__codelineno-0-43"></a> <span class="k">discard</span> <span class="o">?</span> <span class="n">pb</span><span class="p">.</span><span class="n">getRepeatedField</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">metrics</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-38" name="__codelineno-0-38" href="#__codelineno-0-38"></a><span class="sx">proc</span><span class="w"> </span><span class="sx">decode(_</span>:<span class="w"> </span><span class="sx">type</span><span class="w"> </span><span class="sx">MetricList</span>,<span class="w"> </span><span class="sx">buf</span>:<span class="w"> </span><span class="sx">seq[byte]): Result[MetricList</span>,<span class="w"> </span><span class="sx">ProtoError] =</span>
|
||||
<a id="__codelineno-0-39" name="__codelineno-0-39" href="#__codelineno-0-39"></a><span class="sx"> var</span>
|
||||
<a id="__codelineno-0-40" name="__codelineno-0-40" href="#__codelineno-0-40"></a><span class="w"> </span><span class="sx">res</span>:<span class="w"> </span><span class="sx">MetricList</span>
|
||||
<a id="__codelineno-0-41" name="__codelineno-0-41" href="#__codelineno-0-41"></a><span class="w"> </span><span class="sx">metrics</span>:<span class="w"> </span><span class="sx">seq[seq[byte]]</span>
|
||||
<a id="__codelineno-0-42" name="__codelineno-0-42" href="#__codelineno-0-42"></a><span class="sx"> let</span><span class="w"> </span><span class="sx">pb</span><span class="w"> </span><span class="sx">= initProtoBuffer(buf)</span>
|
||||
<a id="__codelineno-0-43" name="__codelineno-0-43" href="#__codelineno-0-43"></a><span class="sx"> discard</span><span class="w"> </span><span class="sx">? pb.getRepeatedField(1</span>,<span class="w"> </span><span class="sx">metrics)</span>
|
||||
<a id="__codelineno-0-44" name="__codelineno-0-44" href="#__codelineno-0-44"></a>
|
||||
<a id="__codelineno-0-45" name="__codelineno-0-45" href="#__codelineno-0-45"></a> <span class="k">for</span> <span class="n">metric</span> <span class="ow">in</span> <span class="n">metrics</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-46" name="__codelineno-0-46" href="#__codelineno-0-46"></a> <span class="n">res</span><span class="p">.</span><span class="n">metrics</span> <span class="o">&=</span> <span class="o">?</span> <span class="n">Metric</span><span class="p">.</span><span class="n">decode</span><span class="p">(</span><span class="n">metric</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-47" name="__codelineno-0-47" href="#__codelineno-0-47"></a> <span class="o">?</span> <span class="n">pb</span><span class="p">.</span><span class="n">getRequiredField</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">res</span><span class="p">.</span><span class="n">hostname</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-48" name="__codelineno-0-48" href="#__codelineno-0-48"></a> <span class="n">ok</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
|
||||
<a id="__codelineno-0-45" name="__codelineno-0-45" href="#__codelineno-0-45"></a><span class="sx"> for</span><span class="w"> </span><span class="sx">metric</span><span class="w"> </span><span class="sx">in</span><span class="w"> </span><span class="sx">metrics</span>:
|
||||
<a id="__codelineno-0-46" name="__codelineno-0-46" href="#__codelineno-0-46"></a><span class="w"> </span><span class="sx">res.metrics</span><span class="w"> </span><span class="sx">&= ? Metric.decode(metric)</span>
|
||||
<a id="__codelineno-0-47" name="__codelineno-0-47" href="#__codelineno-0-47"></a><span class="sx"> ? pb.getRequiredField(2</span>,<span class="w"> </span><span class="sx">res.hostname)</span>
|
||||
<a id="__codelineno-0-48" name="__codelineno-0-48" href="#__codelineno-0-48"></a><span class="sx"> ok(res)</span>
|
||||
</code></pre></div>
|
||||
This is exactly like the previous structure, except that we added
|
||||
a <code>hostname</code> to distinguish where the metric is coming from.</p>
|
||||
<p>Now we'll create a small GossipSub network to broadcast the metrics,
|
||||
and collect them on one of the node.
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="k">type</span> <span class="n">Node</span> <span class="o">=</span> <span class="k">tuple</span><span class="o">[</span><span class="n">switch</span><span class="p">:</span> <span class="n">Switch</span><span class="p">,</span> <span class="n">gossip</span><span class="p">:</span> <span class="n">GossipSub</span><span class="p">,</span> <span class="n">hostname</span><span class="p">:</span> <span class="nb">string</span><span class="o">]</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="k">type</span><span class="w"> </span><span class="n">Node</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">tuple</span><span class="o">[</span><span class="n">switch</span><span class="p">:</span><span class="w"> </span><span class="n">Switch</span><span class="p">,</span><span class="w"> </span><span class="n">gossip</span><span class="p">:</span><span class="w"> </span><span class="n">GossipSub</span><span class="p">,</span><span class="w"> </span><span class="n">hostname</span><span class="p">:</span><span class="w"> </span><span class="nb">string</span><span class="o">]</span>
|
||||
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>
|
||||
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="k">proc </span><span class="nf">oneNode</span><span class="p">(</span><span class="n">node</span><span class="p">:</span> <span class="n">Node</span><span class="p">,</span> <span class="n">rng</span><span class="p">:</span> <span class="k">ref</span> <span class="n">HmacDrbgContext</span><span class="p">)</span> <span class="p">{.</span><span class="n">async</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a> <span class="c"># This procedure will handle one of the node of the network</span>
|
||||
<a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a> <span class="n">node</span><span class="p">.</span><span class="n">gossip</span><span class="p">.</span><span class="n">addValidator</span><span class="p">(</span><span class="o">[</span><span class="s">"metrics"</span><span class="o">]</span><span class="p">,</span>
|
||||
<a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a> <span class="k">proc</span><span class="p">(</span><span class="n">topic</span><span class="p">:</span> <span class="nb">string</span><span class="p">,</span> <span class="n">message</span><span class="p">:</span> <span class="n">Message</span><span class="p">):</span> <span class="n">Future</span><span class="o">[</span><span class="n">ValidationResult</span><span class="o">]</span> <span class="p">{.</span><span class="n">async</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a> <span class="k">let</span> <span class="n">decoded</span> <span class="o">=</span> <span class="n">MetricList</span><span class="p">.</span><span class="n">decode</span><span class="p">(</span><span class="n">message</span><span class="p">.</span><span class="n">data</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a> <span class="k">if</span> <span class="n">decoded</span><span class="p">.</span><span class="n">isErr</span><span class="p">:</span> <span class="k">return</span> <span class="n">ValidationResult</span><span class="p">.</span><span class="n">Reject</span>
|
||||
<a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a> <span class="k">return</span> <span class="n">ValidationResult</span><span class="p">.</span><span class="n">Accept</span>
|
||||
<a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a> <span class="p">)</span>
|
||||
<a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a> <span class="c"># This "validator" will attach to the `metrics` topic and make sure</span>
|
||||
<a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a> <span class="c"># that every message in this topic is valid. This allows us to stop</span>
|
||||
<a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a> <span class="c"># propagation of invalid messages quickly in the network, and punish</span>
|
||||
<a id="__codelineno-1-14" name="__codelineno-1-14" href="#__codelineno-1-14"></a> <span class="c"># peers sending them.</span>
|
||||
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="k">proc</span><span class="w"> </span><span class="nf">oneNode</span><span class="p">(</span><span class="n">node</span><span class="p">:</span><span class="w"> </span><span class="n">Node</span><span class="p">,</span><span class="w"> </span><span class="n">rng</span><span class="p">:</span><span class="w"> </span><span class="k">ref</span><span class="w"> </span><span class="n">HmacDrbgContext</span><span class="p">)</span><span class="w"> </span><span class="sx">{.async.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="w"> </span><span class="c"># This procedure will handle one of the node of the network</span>
|
||||
<a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="n">gossip</span><span class="p">.</span><span class="n">addValidator</span><span class="p">(</span><span class="o">[</span><span class="s">"metrics"</span><span class="o">]</span><span class="p">,</span>
|
||||
<a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a><span class="w"> </span><span class="n">proc</span><span class="p">(</span><span class="n">topic</span><span class="p">:</span><span class="w"> </span><span class="nb">string</span><span class="p">,</span><span class="w"> </span><span class="n">message</span><span class="p">:</span><span class="w"> </span><span class="n">Message</span><span class="p">):</span><span class="w"> </span><span class="n">Future</span><span class="o">[</span><span class="n">ValidationResult</span><span class="o">]</span><span class="w"> </span><span class="sx">{.async.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">decoded</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MetricList</span><span class="p">.</span><span class="n">decode</span><span class="p">(</span><span class="n">message</span><span class="p">.</span><span class="n">data</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">decoded</span><span class="p">.</span><span class="n">isErr</span><span class="p">:</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">ValidationResult</span><span class="p">.</span><span class="n">Reject</span>
|
||||
<a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">ValidationResult</span><span class="p">.</span><span class="n">Accept</span>
|
||||
<a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a><span class="w"> </span><span class="p">)</span>
|
||||
<a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a><span class="w"> </span><span class="c"># This "validator" will attach to the `metrics` topic and make sure</span>
|
||||
<a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a><span class="w"> </span><span class="c"># that every message in this topic is valid. This allows us to stop</span>
|
||||
<a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a><span class="w"> </span><span class="c"># propagation of invalid messages quickly in the network, and punish</span>
|
||||
<a id="__codelineno-1-14" name="__codelineno-1-14" href="#__codelineno-1-14"></a><span class="w"> </span><span class="c"># peers sending them.</span>
|
||||
<a id="__codelineno-1-15" name="__codelineno-1-15" href="#__codelineno-1-15"></a>
|
||||
<a id="__codelineno-1-16" name="__codelineno-1-16" href="#__codelineno-1-16"></a> <span class="c"># `John` will be responsible to log the metrics, the rest of the nodes</span>
|
||||
<a id="__codelineno-1-17" name="__codelineno-1-17" href="#__codelineno-1-17"></a> <span class="c"># will just forward them in the network</span>
|
||||
<a id="__codelineno-1-18" name="__codelineno-1-18" href="#__codelineno-1-18"></a> <span class="k">if</span> <span class="n">node</span><span class="p">.</span><span class="n">hostname</span> <span class="o">==</span> <span class="s">"John"</span><span class="p">:</span>
|
||||
<a id="__codelineno-1-19" name="__codelineno-1-19" href="#__codelineno-1-19"></a> <span class="n">node</span><span class="p">.</span><span class="n">gossip</span><span class="p">.</span><span class="n">subscribe</span><span class="p">(</span><span class="s">"metrics"</span><span class="p">,</span>
|
||||
<a id="__codelineno-1-20" name="__codelineno-1-20" href="#__codelineno-1-20"></a> <span class="k">proc</span> <span class="p">(</span><span class="n">topic</span><span class="p">:</span> <span class="nb">string</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="nb">seq</span><span class="o">[</span><span class="n">byte</span><span class="o">]</span><span class="p">)</span> <span class="p">{.</span><span class="n">async</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-1-21" name="__codelineno-1-21" href="#__codelineno-1-21"></a> <span class="n">echo</span> <span class="n">MetricList</span><span class="p">.</span><span class="n">decode</span><span class="p">(</span><span class="n">data</span><span class="p">).</span><span class="n">tryGet</span><span class="p">()</span>
|
||||
<a id="__codelineno-1-22" name="__codelineno-1-22" href="#__codelineno-1-22"></a> <span class="p">)</span>
|
||||
<a id="__codelineno-1-23" name="__codelineno-1-23" href="#__codelineno-1-23"></a> <span class="k">else</span><span class="p">:</span>
|
||||
<a id="__codelineno-1-24" name="__codelineno-1-24" href="#__codelineno-1-24"></a> <span class="n">node</span><span class="p">.</span><span class="n">gossip</span><span class="p">.</span><span class="n">subscribe</span><span class="p">(</span><span class="s">"metrics"</span><span class="p">,</span> <span class="kp">nil</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-16" name="__codelineno-1-16" href="#__codelineno-1-16"></a><span class="w"> </span><span class="c"># `John` will be responsible to log the metrics, the rest of the nodes</span>
|
||||
<a id="__codelineno-1-17" name="__codelineno-1-17" href="#__codelineno-1-17"></a><span class="w"> </span><span class="c"># will just forward them in the network</span>
|
||||
<a id="__codelineno-1-18" name="__codelineno-1-18" href="#__codelineno-1-18"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="n">hostname</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s">"John"</span><span class="p">:</span>
|
||||
<a id="__codelineno-1-19" name="__codelineno-1-19" href="#__codelineno-1-19"></a><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="n">gossip</span><span class="p">.</span><span class="n">subscribe</span><span class="p">(</span><span class="s">"metrics"</span><span class="p">,</span>
|
||||
<a id="__codelineno-1-20" name="__codelineno-1-20" href="#__codelineno-1-20"></a><span class="w"> </span><span class="n">proc</span><span class="w"> </span><span class="p">(</span><span class="n">topic</span><span class="p">:</span><span class="w"> </span><span class="nb">string</span><span class="p">,</span><span class="w"> </span><span class="n">data</span><span class="p">:</span><span class="w"> </span><span class="nb">seq</span><span class="o">[</span><span class="n">byte</span><span class="o">]</span><span class="p">)</span><span class="w"> </span><span class="sx">{.async.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-1-21" name="__codelineno-1-21" href="#__codelineno-1-21"></a><span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="n">MetricList</span><span class="p">.</span><span class="n">decode</span><span class="p">(</span><span class="n">data</span><span class="p">).</span><span class="n">tryGet</span><span class="p">()</span>
|
||||
<a id="__codelineno-1-22" name="__codelineno-1-22" href="#__codelineno-1-22"></a><span class="w"> </span><span class="p">)</span>
|
||||
<a id="__codelineno-1-23" name="__codelineno-1-23" href="#__codelineno-1-23"></a><span class="w"> </span><span class="k">else</span><span class="p">:</span>
|
||||
<a id="__codelineno-1-24" name="__codelineno-1-24" href="#__codelineno-1-24"></a><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="n">gossip</span><span class="p">.</span><span class="n">subscribe</span><span class="p">(</span><span class="s">"metrics"</span><span class="p">,</span><span class="w"> </span><span class="kp">nil</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-25" name="__codelineno-1-25" href="#__codelineno-1-25"></a>
|
||||
<a id="__codelineno-1-26" name="__codelineno-1-26" href="#__codelineno-1-26"></a> <span class="c"># Create random metrics 10 times and broadcast them</span>
|
||||
<a id="__codelineno-1-27" name="__codelineno-1-27" href="#__codelineno-1-27"></a> <span class="k">for</span> <span class="err">_ in 0..<10:</span>
|
||||
<a id="__codelineno-1-28" name="__codelineno-1-28" href="#__codelineno-1-28"></a> <span class="n">await</span> <span class="n">sleepAsync</span><span class="p">(</span><span class="mf">500.</span><span class="n">milliseconds</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-29" name="__codelineno-1-29" href="#__codelineno-1-29"></a> <span class="kd">var</span> <span class="n">metricList</span> <span class="o">=</span> <span class="n">MetricList</span><span class="p">(</span><span class="n">hostname</span><span class="p">:</span> <span class="n">node</span><span class="p">.</span><span class="n">hostname</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-30" name="__codelineno-1-30" href="#__codelineno-1-30"></a> <span class="k">let</span> <span class="n">metricCount</span> <span class="o">=</span> <span class="n">rng</span><span class="o">[]</span><span class="p">.</span><span class="n">generate</span><span class="p">(</span><span class="n">uint32</span><span class="p">)</span> <span class="ow">mod</span> <span class="mi">4</span>
|
||||
<a id="__codelineno-1-31" name="__codelineno-1-31" href="#__codelineno-1-31"></a> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="mi">0</span> <span class="p">..</span><span class="o"><</span> <span class="n">metricCount</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:</span>
|
||||
<a id="__codelineno-1-32" name="__codelineno-1-32" href="#__codelineno-1-32"></a> <span class="n">metricList</span><span class="p">.</span><span class="n">metrics</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">Metric</span><span class="p">(</span>
|
||||
<a id="__codelineno-1-33" name="__codelineno-1-33" href="#__codelineno-1-33"></a> <span class="n">name</span><span class="p">:</span> <span class="s">"metric_"</span> <span class="o">&</span> <span class="o">$</span><span class="n">i</span><span class="p">,</span>
|
||||
<a id="__codelineno-1-34" name="__codelineno-1-34" href="#__codelineno-1-34"></a> <span class="n">value</span><span class="p">:</span> <span class="nb">float</span><span class="p">(</span><span class="n">rng</span><span class="o">[]</span><span class="p">.</span><span class="n">generate</span><span class="p">(</span><span class="n">uint16</span><span class="p">))</span> <span class="o">/</span> <span class="mf">1000.0</span>
|
||||
<a id="__codelineno-1-35" name="__codelineno-1-35" href="#__codelineno-1-35"></a> <span class="p">))</span>
|
||||
<a id="__codelineno-1-26" name="__codelineno-1-26" href="#__codelineno-1-26"></a><span class="w"> </span><span class="c"># Create random metrics 10 times and broadcast them</span>
|
||||
<a id="__codelineno-1-27" name="__codelineno-1-27" href="#__codelineno-1-27"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="err">_ in 0..<10:</span>
|
||||
<a id="__codelineno-1-28" name="__codelineno-1-28" href="#__codelineno-1-28"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">sleepAsync</span><span class="p">(</span><span class="mf">500.</span><span class="n">milliseconds</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-29" name="__codelineno-1-29" href="#__codelineno-1-29"></a><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="n">metricList</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MetricList</span><span class="p">(</span><span class="n">hostname</span><span class="p">:</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="n">hostname</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-30" name="__codelineno-1-30" href="#__codelineno-1-30"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">metricCount</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rng</span><span class="o">[]</span><span class="p">.</span><span class="n">generate</span><span class="p">(</span><span class="n">uint32</span><span class="p">)</span><span class="w"> </span><span class="ow">mod</span><span class="w"> </span><span class="mi">4</span>
|
||||
<a id="__codelineno-1-31" name="__codelineno-1-31" href="#__codelineno-1-31"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">..</span><span class="o"><</span><span class="w"> </span><span class="n">metricCount</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">:</span>
|
||||
<a id="__codelineno-1-32" name="__codelineno-1-32" href="#__codelineno-1-32"></a><span class="w"> </span><span class="n">metricList</span><span class="p">.</span><span class="n">metrics</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">Metric</span><span class="p">(</span>
|
||||
<a id="__codelineno-1-33" name="__codelineno-1-33" href="#__codelineno-1-33"></a><span class="w"> </span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="s">"metric_"</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="o">$</span><span class="n">i</span><span class="p">,</span>
|
||||
<a id="__codelineno-1-34" name="__codelineno-1-34" href="#__codelineno-1-34"></a><span class="w"> </span><span class="n">value</span><span class="p">:</span><span class="w"> </span><span class="nb">float</span><span class="p">(</span><span class="n">rng</span><span class="o">[]</span><span class="p">.</span><span class="n">generate</span><span class="p">(</span><span class="n">uint16</span><span class="p">))</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mf">1000.0</span>
|
||||
<a id="__codelineno-1-35" name="__codelineno-1-35" href="#__codelineno-1-35"></a><span class="w"> </span><span class="p">))</span>
|
||||
<a id="__codelineno-1-36" name="__codelineno-1-36" href="#__codelineno-1-36"></a>
|
||||
<a id="__codelineno-1-37" name="__codelineno-1-37" href="#__codelineno-1-37"></a> <span class="k">discard</span> <span class="n">await</span> <span class="n">node</span><span class="p">.</span><span class="n">gossip</span><span class="p">.</span><span class="n">publish</span><span class="p">(</span><span class="s">"metrics"</span><span class="p">,</span> <span class="n">encode</span><span class="p">(</span><span class="n">metricList</span><span class="p">).</span><span class="n">buffer</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-38" name="__codelineno-1-38" href="#__codelineno-1-38"></a> <span class="n">await</span> <span class="n">node</span><span class="p">.</span><span class="n">switch</span><span class="p">.</span><span class="n">stop</span><span class="p">()</span>
|
||||
<a id="__codelineno-1-37" name="__codelineno-1-37" href="#__codelineno-1-37"></a><span class="w"> </span><span class="k">discard</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="n">gossip</span><span class="p">.</span><span class="n">publish</span><span class="p">(</span><span class="s">"metrics"</span><span class="p">,</span><span class="w"> </span><span class="n">encode</span><span class="p">(</span><span class="n">metricList</span><span class="p">).</span><span class="n">buffer</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-38" name="__codelineno-1-38" href="#__codelineno-1-38"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="n">switch</span><span class="p">.</span><span class="n">stop</span><span class="p">()</span>
|
||||
</code></pre></div>
|
||||
For our main procedure, we'll create a few nodes, and connect them together.
|
||||
Note that they are not all interconnected, but GossipSub will take care of
|
||||
broadcasting to the full network nonetheless.
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="k">proc </span><span class="nf">main</span> <span class="p">{.</span><span class="n">async</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a> <span class="k">let</span> <span class="n">rng</span> <span class="o">=</span> <span class="n">newRng</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a> <span class="kd">var</span> <span class="n">nodes</span><span class="p">:</span> <span class="nb">seq</span><span class="o">[</span><span class="n">Node</span><span class="o">]</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="k">proc</span><span class="w"> </span><span class="nf">main</span><span class="w"> </span><span class="sx">{.async.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">rng</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newRng</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="n">nodes</span><span class="p">:</span><span class="w"> </span><span class="nb">seq</span><span class="o">[</span><span class="n">Node</span><span class="o">]</span>
|
||||
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a>
|
||||
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a> <span class="k">for</span> <span class="n">hostname</span> <span class="ow">in</span> <span class="o">[</span><span class="s">"John"</span><span class="p">,</span> <span class="s">"Walter"</span><span class="p">,</span> <span class="s">"David"</span><span class="p">,</span> <span class="s">"Thuy"</span><span class="p">,</span> <span class="s">"Amy"</span><span class="o">]</span><span class="p">:</span>
|
||||
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a> <span class="k">let</span>
|
||||
<a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a> <span class="n">switch</span> <span class="o">=</span> <span class="n">newStandardSwitch</span><span class="p">(</span><span class="n">rng</span><span class="o">=</span><span class="n">rng</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a> <span class="n">gossip</span> <span class="o">=</span> <span class="n">GossipSub</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="n">switch</span> <span class="o">=</span> <span class="n">switch</span><span class="p">,</span> <span class="n">triggerSelf</span> <span class="o">=</span> <span class="kp">true</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-9" name="__codelineno-2-9" href="#__codelineno-2-9"></a> <span class="n">switch</span><span class="p">.</span><span class="n">mount</span><span class="p">(</span><span class="n">gossip</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-10" name="__codelineno-2-10" href="#__codelineno-2-10"></a> <span class="n">await</span> <span class="n">switch</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">hostname</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="o">[</span><span class="s">"John"</span><span class="p">,</span><span class="w"> </span><span class="s">"Walter"</span><span class="p">,</span><span class="w"> </span><span class="s">"David"</span><span class="p">,</span><span class="w"> </span><span class="s">"Thuy"</span><span class="p">,</span><span class="w"> </span><span class="s">"Amy"</span><span class="o">]</span><span class="p">:</span>
|
||||
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a><span class="w"> </span><span class="k">let</span>
|
||||
<a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a><span class="w"> </span><span class="n">switch</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newStandardSwitch</span><span class="p">(</span><span class="n">rng</span><span class="o">=</span><span class="n">rng</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a><span class="w"> </span><span class="n">gossip</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GossipSub</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="n">switch</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">switch</span><span class="p">,</span><span class="w"> </span><span class="n">triggerSelf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kp">true</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-9" name="__codelineno-2-9" href="#__codelineno-2-9"></a><span class="w"> </span><span class="n">switch</span><span class="p">.</span><span class="n">mount</span><span class="p">(</span><span class="n">gossip</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-10" name="__codelineno-2-10" href="#__codelineno-2-10"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">switch</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-11" name="__codelineno-2-11" href="#__codelineno-2-11"></a>
|
||||
<a id="__codelineno-2-12" name="__codelineno-2-12" href="#__codelineno-2-12"></a> <span class="n">nodes</span><span class="p">.</span><span class="n">add</span><span class="p">((</span><span class="n">switch</span><span class="p">,</span> <span class="n">gossip</span><span class="p">,</span> <span class="n">hostname</span><span class="p">))</span>
|
||||
<a id="__codelineno-2-12" name="__codelineno-2-12" href="#__codelineno-2-12"></a><span class="w"> </span><span class="n">nodes</span><span class="p">.</span><span class="n">add</span><span class="p">((</span><span class="n">switch</span><span class="p">,</span><span class="w"> </span><span class="n">gossip</span><span class="p">,</span><span class="w"> </span><span class="n">hostname</span><span class="p">))</span>
|
||||
<a id="__codelineno-2-13" name="__codelineno-2-13" href="#__codelineno-2-13"></a>
|
||||
<a id="__codelineno-2-14" name="__codelineno-2-14" href="#__codelineno-2-14"></a> <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">nodes</span><span class="p">:</span>
|
||||
<a id="__codelineno-2-15" name="__codelineno-2-15" href="#__codelineno-2-15"></a> <span class="c"># Connect to a few neighbors</span>
|
||||
<a id="__codelineno-2-16" name="__codelineno-2-16" href="#__codelineno-2-16"></a> <span class="k">for</span> <span class="n">otherNodeIdx</span> <span class="ow">in</span> <span class="n">index</span> <span class="o">-</span> <span class="mi">1</span> <span class="p">..</span> <span class="n">index</span> <span class="o">+</span> <span class="mi">2</span><span class="p">:</span>
|
||||
<a id="__codelineno-2-17" name="__codelineno-2-17" href="#__codelineno-2-17"></a> <span class="k">if</span> <span class="n">otherNodeIdx</span> <span class="ow">notin</span> <span class="mi">0</span> <span class="p">..</span><span class="o"><</span> <span class="n">nodes</span><span class="p">.</span><span class="n">len</span> <span class="ow">or</span> <span class="n">otherNodeIdx</span> <span class="o">==</span> <span class="n">index</span><span class="p">:</span> <span class="k">continue</span>
|
||||
<a id="__codelineno-2-18" name="__codelineno-2-18" href="#__codelineno-2-18"></a> <span class="k">let</span> <span class="n">otherNode</span> <span class="o">=</span> <span class="n">nodes</span><span class="o">[</span><span class="n">otherNodeIdx</span><span class="o">]</span>
|
||||
<a id="__codelineno-2-19" name="__codelineno-2-19" href="#__codelineno-2-19"></a> <span class="n">await</span> <span class="n">node</span><span class="p">.</span><span class="n">switch</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span>
|
||||
<a id="__codelineno-2-20" name="__codelineno-2-20" href="#__codelineno-2-20"></a> <span class="n">otherNode</span><span class="p">.</span><span class="n">switch</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">,</span>
|
||||
<a id="__codelineno-2-21" name="__codelineno-2-21" href="#__codelineno-2-21"></a> <span class="n">otherNode</span><span class="p">.</span><span class="n">switch</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">addrs</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-14" name="__codelineno-2-14" href="#__codelineno-2-14"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">index</span><span class="p">,</span><span class="w"> </span><span class="n">node</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">nodes</span><span class="p">:</span>
|
||||
<a id="__codelineno-2-15" name="__codelineno-2-15" href="#__codelineno-2-15"></a><span class="w"> </span><span class="c"># Connect to a few neighbors</span>
|
||||
<a id="__codelineno-2-16" name="__codelineno-2-16" href="#__codelineno-2-16"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">otherNodeIdx</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">..</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">2</span><span class="p">:</span>
|
||||
<a id="__codelineno-2-17" name="__codelineno-2-17" href="#__codelineno-2-17"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">otherNodeIdx</span><span class="w"> </span><span class="ow">notin</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">..</span><span class="o"><</span><span class="w"> </span><span class="n">nodes</span><span class="p">.</span><span class="n">len</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">otherNodeIdx</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">index</span><span class="p">:</span><span class="w"> </span><span class="k">continue</span>
|
||||
<a id="__codelineno-2-18" name="__codelineno-2-18" href="#__codelineno-2-18"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">otherNode</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">nodes</span><span class="o">[</span><span class="n">otherNodeIdx</span><span class="o">]</span>
|
||||
<a id="__codelineno-2-19" name="__codelineno-2-19" href="#__codelineno-2-19"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">node</span><span class="p">.</span><span class="n">switch</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span>
|
||||
<a id="__codelineno-2-20" name="__codelineno-2-20" href="#__codelineno-2-20"></a><span class="w"> </span><span class="n">otherNode</span><span class="p">.</span><span class="n">switch</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">,</span>
|
||||
<a id="__codelineno-2-21" name="__codelineno-2-21" href="#__codelineno-2-21"></a><span class="w"> </span><span class="n">otherNode</span><span class="p">.</span><span class="n">switch</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">addrs</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-22" name="__codelineno-2-22" href="#__codelineno-2-22"></a>
|
||||
<a id="__codelineno-2-23" name="__codelineno-2-23" href="#__codelineno-2-23"></a> <span class="kd">var</span> <span class="n">allFuts</span><span class="p">:</span> <span class="nb">seq</span><span class="o">[</span><span class="n">Future</span><span class="o">[</span><span class="n">void</span><span class="o">]]</span>
|
||||
<a id="__codelineno-2-24" name="__codelineno-2-24" href="#__codelineno-2-24"></a> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">nodes</span><span class="p">:</span>
|
||||
<a id="__codelineno-2-25" name="__codelineno-2-25" href="#__codelineno-2-25"></a> <span class="n">allFuts</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">oneNode</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">rng</span><span class="p">))</span>
|
||||
<a id="__codelineno-2-23" name="__codelineno-2-23" href="#__codelineno-2-23"></a><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="n">allFuts</span><span class="p">:</span><span class="w"> </span><span class="nb">seq</span><span class="o">[</span><span class="n">Future</span><span class="o">[</span><span class="n">void</span><span class="o">]]</span>
|
||||
<a id="__codelineno-2-24" name="__codelineno-2-24" href="#__codelineno-2-24"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">node</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">nodes</span><span class="p">:</span>
|
||||
<a id="__codelineno-2-25" name="__codelineno-2-25" href="#__codelineno-2-25"></a><span class="w"> </span><span class="n">allFuts</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">oneNode</span><span class="p">(</span><span class="n">node</span><span class="p">,</span><span class="w"> </span><span class="n">rng</span><span class="p">))</span>
|
||||
<a id="__codelineno-2-26" name="__codelineno-2-26" href="#__codelineno-2-26"></a>
|
||||
<a id="__codelineno-2-27" name="__codelineno-2-27" href="#__codelineno-2-27"></a> <span class="n">await</span> <span class="n">allFutures</span><span class="p">(</span><span class="n">allFuts</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-27" name="__codelineno-2-27" href="#__codelineno-2-27"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">allFutures</span><span class="p">(</span><span class="n">allFuts</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-28" name="__codelineno-2-28" href="#__codelineno-2-28"></a>
|
||||
<a id="__codelineno-2-29" name="__codelineno-2-29" href="#__codelineno-2-29"></a><span class="n">waitFor</span><span class="p">(</span><span class="n">main</span><span class="p">())</span>
|
||||
</code></pre></div>
|
||||
@ -642,42 +654,6 @@ and adds features such as history, spam protection, and light node friendliness.
|
||||
|
||||
<footer class="md-footer">
|
||||
|
||||
|
||||
<nav class="md-footer__inner md-grid" aria-label="Footer" >
|
||||
|
||||
|
||||
<a href="../tutorial_3_protobuf/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Protobuf" rel="prev">
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
||||
</div>
|
||||
<div class="md-footer__title">
|
||||
<div class="md-ellipsis">
|
||||
<span class="md-footer__direction">
|
||||
Previous
|
||||
</span>
|
||||
Protobuf
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a href="../tutorial_5_discovery/" class="md-footer__link md-footer__link--next" aria-label="Next: Discovery Manager" rel="next">
|
||||
<div class="md-footer__title">
|
||||
<div class="md-ellipsis">
|
||||
<span class="md-footer__direction">
|
||||
Next
|
||||
</span>
|
||||
Discovery Manager
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
</nav>
|
||||
|
||||
<div class="md-footer-meta md-typeset">
|
||||
<div class="md-footer-meta__inner md-grid">
|
||||
<div class="md-copyright">
|
||||
@ -699,10 +675,10 @@ and adds features such as history, spam protection, and light node friendliness.
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.instant", "search.highlight"], "search": "../assets/javascripts/workers/search.16e2a7d4.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script>
|
||||
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.instant", "search.highlight"], "search": "../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.8492ddcf.min.js"></script>
|
||||
<script src="../assets/javascripts/bundle.b4d07000.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
@ -36,7 +36,7 @@ proc new(T: typedesc[DumbProto], nodeNumber: int): T =
|
||||
proc handle(conn: Connection, proto: string) {.async, gcsafe.} =
|
||||
echo "Node", nodeNumber, " received: ", string.fromBytes(await conn.readLp(1024))
|
||||
await conn.close()
|
||||
return T(codecs: @[DumbCodec], handler: handle)
|
||||
return T.new(codecs = @[DumbCodec], handler = handle)
|
||||
|
||||
## ## Bootnodes
|
||||
## The first time a p2p program is ran, he needs to know how to join
|
||||
|
@ -10,8 +10,14 @@
|
||||
|
||||
<link rel="canonical" href="https://status-im.github.io/nim-libp2p/docs/tutorial_5_discovery/">
|
||||
|
||||
<link rel="icon" href="https://docs.libp2p.io/images/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.1, mkdocs-material-8.5.7">
|
||||
|
||||
<link rel="prev" href="../tutorial_4_gossipsub/">
|
||||
|
||||
|
||||
<link rel="next" href="../tutorial_6_game/">
|
||||
|
||||
<link rel="icon" href="https://libp2p.io/img/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.15">
|
||||
|
||||
|
||||
|
||||
@ -19,11 +25,10 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.20d9efc8.min.css">
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.26e3688c.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/palette.cbb835fc.min.css">
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/palette.ecc896b0.min.css">
|
||||
|
||||
|
||||
|
||||
@ -56,7 +61,7 @@
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="">
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
|
||||
@ -80,11 +85,13 @@
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
|
||||
|
||||
<header class="md-header md-header--shadow" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href=".." title="nim-libp2p" class="md-header__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
@ -107,27 +114,31 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
</form>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -157,7 +168,7 @@
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list"></ol>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -169,7 +180,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -203,7 +214,7 @@
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href=".." title="nim-libp2p" class="md-nav__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
nim-libp2p
|
||||
@ -213,7 +224,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -236,17 +247,18 @@
|
||||
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_1" type="checkbox" id="__nav_1" checked>
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" checked>
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_1">
|
||||
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
|
||||
Tutorials
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" aria-label="Tutorials" data-md-level="1">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_1">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Tutorials
|
||||
@ -332,7 +344,7 @@
|
||||
|
||||
<li class="md-nav__item md-nav__item--active">
|
||||
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
|
||||
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
||||
|
||||
|
||||
|
||||
@ -481,36 +493,36 @@ spread informations (some metrics) on the network using gossipsub.
|
||||
For this tutorial, on the other hand, we'll go back on a simple example
|
||||
we'll try to discover a specific peers to greet on the network.</p>
|
||||
<p>First, as usual, we import the dependencies:
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kn">import</span> <span class="n">sequtils</span>
|
||||
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">import</span> <span class="n">chronos</span>
|
||||
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="kn">import</span> <span class="n">stew</span><span class="o">/</span><span class="n">byteutils</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kn">import</span><span class="w"> </span><span class="n">sequtils</span>
|
||||
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">import</span><span class="w"> </span><span class="n">chronos</span>
|
||||
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="kn">import</span><span class="w"> </span><span class="n">stew</span><span class="o">/</span><span class="n">byteutils</span>
|
||||
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a>
|
||||
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="kn">import</span> <span class="n">libp2p</span>
|
||||
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="kn">import</span> <span class="n">libp2p</span><span class="o">/</span><span class="n">protocols</span><span class="o">/</span><span class="n">rendezvous</span>
|
||||
<a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="kn">import</span> <span class="n">libp2p</span><span class="o">/</span><span class="n">discovery</span><span class="o">/</span><span class="n">rendezvousinterface</span>
|
||||
<a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="kn">import</span> <span class="n">libp2p</span><span class="o">/</span><span class="n">discovery</span><span class="o">/</span><span class="n">discoverymngr</span>
|
||||
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="kn">import</span><span class="w"> </span><span class="n">libp2p</span>
|
||||
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="kn">import</span><span class="w"> </span><span class="n">libp2p</span><span class="o">/</span><span class="n">protocols</span><span class="o">/</span><span class="n">rendezvous</span>
|
||||
<a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="kn">import</span><span class="w"> </span><span class="n">libp2p</span><span class="o">/</span><span class="n">discovery</span><span class="o">/</span><span class="n">rendezvousinterface</span>
|
||||
<a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="kn">import</span><span class="w"> </span><span class="n">libp2p</span><span class="o">/</span><span class="n">discovery</span><span class="o">/</span><span class="n">discoverymngr</span>
|
||||
</code></pre></div>
|
||||
We'll not use newStandardSwitch this time as we need the discovery protocol
|
||||
<a href="https://github.com/libp2p/specs/blob/master/rendezvous/README.md">RendezVous</a> to be mounted on the switch using withRendezVous.</p>
|
||||
<p>Note that other discovery methods such as <a href="https://github.com/libp2p/specs/blob/master/kad-dht/README.md">Kademlia</a> or <a href="https://github.com/ethereum/devp2p/blob/master/discv5/discv5.md">discv5</a> exist.
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="k">proc </span><span class="nf">createSwitch</span><span class="p">(</span><span class="n">rdv</span><span class="p">:</span> <span class="n">RendezVous</span> <span class="o">=</span> <span class="n">RendezVous</span><span class="p">.</span><span class="n">new</span><span class="p">()):</span> <span class="n">Switch</span> <span class="o">=</span>
|
||||
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a> <span class="n">SwitchBuilder</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a> <span class="p">.</span><span class="n">withRng</span><span class="p">(</span><span class="n">newRng</span><span class="p">())</span>
|
||||
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a> <span class="p">.</span><span class="n">withAddresses</span><span class="p">(</span><span class="o">@[</span> <span class="n">MultiAddress</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="s">"/ip4/0.0.0.0/tcp/0"</span><span class="p">).</span><span class="n">tryGet</span><span class="p">()</span> <span class="o">]</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a> <span class="p">.</span><span class="n">withTcpTransport</span><span class="p">()</span>
|
||||
<a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a> <span class="p">.</span><span class="n">withYamux</span><span class="p">()</span>
|
||||
<a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a> <span class="p">.</span><span class="n">withNoise</span><span class="p">()</span>
|
||||
<a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a> <span class="p">.</span><span class="n">withRendezVous</span><span class="p">(</span><span class="n">rdv</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a> <span class="p">.</span><span class="n">build</span><span class="p">()</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="k">proc</span><span class="w"> </span><span class="nf">createSwitch</span><span class="p">(</span><span class="n">rdv</span><span class="p">:</span><span class="w"> </span><span class="n">RendezVous</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RendezVous</span><span class="p">.</span><span class="n">new</span><span class="p">()):</span><span class="w"> </span><span class="n">Switch</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="w"> </span><span class="n">SwitchBuilder</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="w"> </span><span class="p">.</span><span class="n">withRng</span><span class="p">(</span><span class="n">newRng</span><span class="p">())</span>
|
||||
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="w"> </span><span class="p">.</span><span class="n">withAddresses</span><span class="p">(</span><span class="o">@[</span><span class="w"> </span><span class="n">MultiAddress</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="s">"/ip4/0.0.0.0/tcp/0"</span><span class="p">).</span><span class="n">tryGet</span><span class="p">()</span><span class="w"> </span><span class="o">]</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="w"> </span><span class="p">.</span><span class="n">withTcpTransport</span><span class="p">()</span>
|
||||
<a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a><span class="w"> </span><span class="p">.</span><span class="n">withYamux</span><span class="p">()</span>
|
||||
<a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a><span class="w"> </span><span class="p">.</span><span class="n">withNoise</span><span class="p">()</span>
|
||||
<a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a><span class="w"> </span><span class="p">.</span><span class="n">withRendezVous</span><span class="p">(</span><span class="n">rdv</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a><span class="w"> </span><span class="p">.</span><span class="n">build</span><span class="p">()</span>
|
||||
<a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a>
|
||||
<a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a><span class="c"># Create a really simple protocol to log one message received then close the stream</span>
|
||||
<a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a><span class="k">const</span> <span class="n">DumbCodec</span> <span class="o">=</span> <span class="s">"/dumb/proto/1.0.0"</span>
|
||||
<a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a><span class="k">type</span> <span class="n">DumbProto</span> <span class="o">=</span> <span class="k">ref</span> <span class="k">object</span> <span class="k">of</span> <span class="n">LPProtocol</span>
|
||||
<a id="__codelineno-1-14" name="__codelineno-1-14" href="#__codelineno-1-14"></a><span class="k">proc </span><span class="nf">new</span><span class="p">(</span><span class="n">T</span><span class="p">:</span> <span class="n">typedesc</span><span class="o">[</span><span class="n">DumbProto</span><span class="o">]</span><span class="p">,</span> <span class="n">nodeNumber</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span> <span class="n">T</span> <span class="o">=</span>
|
||||
<a id="__codelineno-1-15" name="__codelineno-1-15" href="#__codelineno-1-15"></a> <span class="k">proc </span><span class="nf">handle</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span> <span class="n">Connection</span><span class="p">,</span> <span class="n">proto</span><span class="p">:</span> <span class="nb">string</span><span class="p">)</span> <span class="p">{.</span><span class="n">async</span><span class="p">,</span> <span class="n">gcsafe</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-1-16" name="__codelineno-1-16" href="#__codelineno-1-16"></a> <span class="n">echo</span> <span class="s">"Node"</span><span class="p">,</span> <span class="n">nodeNumber</span><span class="p">,</span> <span class="s">" received: "</span><span class="p">,</span> <span class="nb">string</span><span class="p">.</span><span class="n">fromBytes</span><span class="p">(</span><span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">1024</span><span class="p">))</span>
|
||||
<a id="__codelineno-1-17" name="__codelineno-1-17" href="#__codelineno-1-17"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<a id="__codelineno-1-18" name="__codelineno-1-18" href="#__codelineno-1-18"></a> <span class="k">return</span> <span class="n">T</span><span class="p">(</span><span class="n">codecs</span><span class="p">:</span> <span class="o">@[</span><span class="n">DumbCodec</span><span class="o">]</span><span class="p">,</span> <span class="n">handler</span><span class="p">:</span> <span class="n">handle</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a><span class="k">const</span><span class="w"> </span><span class="n">DumbCodec</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"/dumb/proto/1.0.0"</span>
|
||||
<a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a><span class="k">type</span><span class="w"> </span><span class="n">DumbProto</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">ref</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="n">LPProtocol</span>
|
||||
<a id="__codelineno-1-14" name="__codelineno-1-14" href="#__codelineno-1-14"></a><span class="k">proc</span><span class="w"> </span><span class="nf">new</span><span class="p">(</span><span class="n">T</span><span class="p">:</span><span class="w"> </span><span class="n">typedesc</span><span class="o">[</span><span class="n">DumbProto</span><span class="o">]</span><span class="p">,</span><span class="w"> </span><span class="n">nodeNumber</span><span class="p">:</span><span class="w"> </span><span class="nb">int</span><span class="p">):</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-1-15" name="__codelineno-1-15" href="#__codelineno-1-15"></a><span class="w"> </span><span class="k">proc</span><span class="w"> </span><span class="nf">handle</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span><span class="w"> </span><span class="n">Connection</span><span class="p">,</span><span class="w"> </span><span class="n">proto</span><span class="p">:</span><span class="w"> </span><span class="nb">string</span><span class="p">)</span><span class="w"> </span><span class="sx">{.async</span>,<span class="w"> </span><span class="sx">gcsafe.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-1-16" name="__codelineno-1-16" href="#__codelineno-1-16"></a><span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="s">"Node"</span><span class="p">,</span><span class="w"> </span><span class="n">nodeNumber</span><span class="p">,</span><span class="w"> </span><span class="s">" received: "</span><span class="p">,</span><span class="w"> </span><span class="nb">string</span><span class="p">.</span><span class="n">fromBytes</span><span class="p">(</span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">1024</span><span class="p">))</span>
|
||||
<a id="__codelineno-1-17" name="__codelineno-1-17" href="#__codelineno-1-17"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<a id="__codelineno-1-18" name="__codelineno-1-18" href="#__codelineno-1-18"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">T</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">codecs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">@[</span><span class="n">DumbCodec</span><span class="o">]</span><span class="p">,</span><span class="w"> </span><span class="n">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">handle</span><span class="p">)</span>
|
||||
</code></pre></div></p>
|
||||
<h2 id="bootnodes">Bootnodes</h2>
|
||||
<p>The first time a p2p program is ran, he needs to know how to join
|
||||
@ -522,85 +534,85 @@ user to onboard the network.</p>
|
||||
(rendezvous in this case) as a bootnode. For this example, we'll
|
||||
create a bootnode, and then every peer will advertise itself on the
|
||||
bootnode, and use it to find other peers
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="k">proc </span><span class="nf">main</span><span class="p">()</span> <span class="p">{.</span><span class="n">async</span><span class="p">,</span> <span class="n">gcsafe</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a> <span class="k">let</span> <span class="n">bootNode</span> <span class="o">=</span> <span class="n">createSwitch</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a> <span class="n">await</span> <span class="n">bootNode</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="k">proc</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="sx">{.async</span>,<span class="w"> </span><span class="sx">gcsafe.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">bootNode</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">createSwitch</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">bootNode</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a>
|
||||
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a> <span class="c"># Create 5 nodes in the network</span>
|
||||
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a> <span class="kd">var</span>
|
||||
<a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a> <span class="n">switches</span><span class="p">:</span> <span class="nb">seq</span><span class="o">[</span><span class="n">Switch</span><span class="o">]</span> <span class="o">=</span> <span class="o">@[]</span>
|
||||
<a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a> <span class="n">discManagers</span><span class="p">:</span> <span class="nb">seq</span><span class="o">[</span><span class="n">DiscoveryManager</span><span class="o">]</span> <span class="o">=</span> <span class="o">@[]</span>
|
||||
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="w"> </span><span class="c"># Create 5 nodes in the network</span>
|
||||
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a><span class="w"> </span><span class="kd">var</span>
|
||||
<a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a><span class="w"> </span><span class="n">switches</span><span class="p">:</span><span class="w"> </span><span class="nb">seq</span><span class="o">[</span><span class="n">Switch</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">@[]</span>
|
||||
<a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a><span class="w"> </span><span class="n">discManagers</span><span class="p">:</span><span class="w"> </span><span class="nb">seq</span><span class="o">[</span><span class="n">DiscoveryManager</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">@[]</span>
|
||||
<a id="__codelineno-2-9" name="__codelineno-2-9" href="#__codelineno-2-9"></a>
|
||||
<a id="__codelineno-2-10" name="__codelineno-2-10" href="#__codelineno-2-10"></a> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="mf">0</span><span class="p">..</span><span class="mi">5</span><span class="p">:</span>
|
||||
<a id="__codelineno-2-11" name="__codelineno-2-11" href="#__codelineno-2-11"></a> <span class="k">let</span> <span class="n">rdv</span> <span class="o">=</span> <span class="n">RendezVous</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-12" name="__codelineno-2-12" href="#__codelineno-2-12"></a> <span class="c"># Create a remote future to await at the end of the program</span>
|
||||
<a id="__codelineno-2-13" name="__codelineno-2-13" href="#__codelineno-2-13"></a> <span class="k">let</span> <span class="n">switch</span> <span class="o">=</span> <span class="n">createSwitch</span><span class="p">(</span><span class="n">rdv</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-14" name="__codelineno-2-14" href="#__codelineno-2-14"></a> <span class="n">switch</span><span class="p">.</span><span class="n">mount</span><span class="p">(</span><span class="n">DumbProto</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">i</span><span class="p">))</span>
|
||||
<a id="__codelineno-2-15" name="__codelineno-2-15" href="#__codelineno-2-15"></a> <span class="n">switches</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">switch</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-10" name="__codelineno-2-10" href="#__codelineno-2-10"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="mf">0</span><span class="p">..</span><span class="mi">5</span><span class="p">:</span>
|
||||
<a id="__codelineno-2-11" name="__codelineno-2-11" href="#__codelineno-2-11"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">rdv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RendezVous</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-12" name="__codelineno-2-12" href="#__codelineno-2-12"></a><span class="w"> </span><span class="c"># Create a remote future to await at the end of the program</span>
|
||||
<a id="__codelineno-2-13" name="__codelineno-2-13" href="#__codelineno-2-13"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">switch</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">createSwitch</span><span class="p">(</span><span class="n">rdv</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-14" name="__codelineno-2-14" href="#__codelineno-2-14"></a><span class="w"> </span><span class="n">switch</span><span class="p">.</span><span class="n">mount</span><span class="p">(</span><span class="n">DumbProto</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">i</span><span class="p">))</span>
|
||||
<a id="__codelineno-2-15" name="__codelineno-2-15" href="#__codelineno-2-15"></a><span class="w"> </span><span class="n">switches</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">switch</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-16" name="__codelineno-2-16" href="#__codelineno-2-16"></a>
|
||||
<a id="__codelineno-2-17" name="__codelineno-2-17" href="#__codelineno-2-17"></a> <span class="c"># A discovery manager is a simple tool, you can set it up by adding discovery</span>
|
||||
<a id="__codelineno-2-18" name="__codelineno-2-18" href="#__codelineno-2-18"></a> <span class="c"># interfaces (such as RendezVousInterface) then you can use it to advertise</span>
|
||||
<a id="__codelineno-2-19" name="__codelineno-2-19" href="#__codelineno-2-19"></a> <span class="c"># something on the network or to request something from it.</span>
|
||||
<a id="__codelineno-2-20" name="__codelineno-2-20" href="#__codelineno-2-20"></a> <span class="k">let</span> <span class="n">dm</span> <span class="o">=</span> <span class="n">DiscoveryManager</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-21" name="__codelineno-2-21" href="#__codelineno-2-21"></a> <span class="c"># A RendezVousInterface is a RendezVous protocol wrapped to be usable by the</span>
|
||||
<a id="__codelineno-2-22" name="__codelineno-2-22" href="#__codelineno-2-22"></a> <span class="c"># DiscoveryManager.</span>
|
||||
<a id="__codelineno-2-23" name="__codelineno-2-23" href="#__codelineno-2-23"></a> <span class="n">dm</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">RendezVousInterface</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">rdv</span><span class="p">))</span>
|
||||
<a id="__codelineno-2-24" name="__codelineno-2-24" href="#__codelineno-2-24"></a> <span class="n">discManagers</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">dm</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-17" name="__codelineno-2-17" href="#__codelineno-2-17"></a><span class="w"> </span><span class="c"># A discovery manager is a simple tool, you can set it up by adding discovery</span>
|
||||
<a id="__codelineno-2-18" name="__codelineno-2-18" href="#__codelineno-2-18"></a><span class="w"> </span><span class="c"># interfaces (such as RendezVousInterface) then you can use it to advertise</span>
|
||||
<a id="__codelineno-2-19" name="__codelineno-2-19" href="#__codelineno-2-19"></a><span class="w"> </span><span class="c"># something on the network or to request something from it.</span>
|
||||
<a id="__codelineno-2-20" name="__codelineno-2-20" href="#__codelineno-2-20"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">dm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">DiscoveryManager</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-21" name="__codelineno-2-21" href="#__codelineno-2-21"></a><span class="w"> </span><span class="c"># A RendezVousInterface is a RendezVous protocol wrapped to be usable by the</span>
|
||||
<a id="__codelineno-2-22" name="__codelineno-2-22" href="#__codelineno-2-22"></a><span class="w"> </span><span class="c"># DiscoveryManager.</span>
|
||||
<a id="__codelineno-2-23" name="__codelineno-2-23" href="#__codelineno-2-23"></a><span class="w"> </span><span class="n">dm</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">RendezVousInterface</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">rdv</span><span class="p">))</span>
|
||||
<a id="__codelineno-2-24" name="__codelineno-2-24" href="#__codelineno-2-24"></a><span class="w"> </span><span class="n">discManagers</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">dm</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-25" name="__codelineno-2-25" href="#__codelineno-2-25"></a>
|
||||
<a id="__codelineno-2-26" name="__codelineno-2-26" href="#__codelineno-2-26"></a> <span class="c"># We can now start the switch and connect to the bootnode</span>
|
||||
<a id="__codelineno-2-27" name="__codelineno-2-27" href="#__codelineno-2-27"></a> <span class="n">await</span> <span class="n">switch</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-28" name="__codelineno-2-28" href="#__codelineno-2-28"></a> <span class="n">await</span> <span class="n">switch</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">bootNode</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">,</span> <span class="n">bootNode</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">addrs</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-26" name="__codelineno-2-26" href="#__codelineno-2-26"></a><span class="w"> </span><span class="c"># We can now start the switch and connect to the bootnode</span>
|
||||
<a id="__codelineno-2-27" name="__codelineno-2-27" href="#__codelineno-2-27"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">switch</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-2-28" name="__codelineno-2-28" href="#__codelineno-2-28"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">switch</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">bootNode</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">,</span><span class="w"> </span><span class="n">bootNode</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">addrs</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-29" name="__codelineno-2-29" href="#__codelineno-2-29"></a>
|
||||
<a id="__codelineno-2-30" name="__codelineno-2-30" href="#__codelineno-2-30"></a> <span class="c"># Each nodes of the network will advertise on some topics (EvenGang or OddClub)</span>
|
||||
<a id="__codelineno-2-31" name="__codelineno-2-31" href="#__codelineno-2-31"></a> <span class="n">dm</span><span class="p">.</span><span class="n">advertise</span><span class="p">(</span><span class="n">RdvNamespace</span><span class="p">(</span><span class="k">if</span> <span class="n">i</span> <span class="ow">mod</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="s">"EvenGang"</span> <span class="k">else</span><span class="p">:</span> <span class="s">"OddClub"</span><span class="p">))</span>
|
||||
<a id="__codelineno-2-30" name="__codelineno-2-30" href="#__codelineno-2-30"></a><span class="w"> </span><span class="c"># Each nodes of the network will advertise on some topics (EvenGang or OddClub)</span>
|
||||
<a id="__codelineno-2-31" name="__codelineno-2-31" href="#__codelineno-2-31"></a><span class="w"> </span><span class="n">dm</span><span class="p">.</span><span class="n">advertise</span><span class="p">(</span><span class="n">RdvNamespace</span><span class="p">(</span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="ow">mod</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">:</span><span class="w"> </span><span class="s">"EvenGang"</span><span class="w"> </span><span class="k">else</span><span class="p">:</span><span class="w"> </span><span class="s">"OddClub"</span><span class="p">))</span>
|
||||
</code></pre></div>
|
||||
We can now create the newcomer. This peer will connect to the boot node, and use
|
||||
it to discover peers & greet them.</p>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a> <span class="k">let</span>
|
||||
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a> <span class="n">rdv</span> <span class="o">=</span> <span class="n">RendezVous</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a> <span class="n">newcomer</span> <span class="o">=</span> <span class="n">createSwitch</span><span class="p">(</span><span class="n">rdv</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a> <span class="n">dm</span> <span class="o">=</span> <span class="n">DiscoveryManager</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a> <span class="n">await</span> <span class="n">newcomer</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a> <span class="n">await</span> <span class="n">newcomer</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">bootNode</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">,</span> <span class="n">bootNode</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">addrs</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-7" name="__codelineno-3-7" href="#__codelineno-3-7"></a> <span class="n">dm</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">RendezVousInterface</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">rdv</span><span class="p">,</span> <span class="n">ttr</span> <span class="o">=</span> <span class="mf">250.</span><span class="n">milliseconds</span><span class="p">))</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="w"> </span><span class="k">let</span>
|
||||
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a><span class="w"> </span><span class="n">rdv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RendezVous</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="w"> </span><span class="n">newcomer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">createSwitch</span><span class="p">(</span><span class="n">rdv</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a><span class="w"> </span><span class="n">dm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">DiscoveryManager</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">newcomer</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">newcomer</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">bootNode</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">peerId</span><span class="p">,</span><span class="w"> </span><span class="n">bootNode</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">addrs</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-7" name="__codelineno-3-7" href="#__codelineno-3-7"></a><span class="w"> </span><span class="n">dm</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">RendezVousInterface</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">rdv</span><span class="p">,</span><span class="w"> </span><span class="n">ttr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">250.</span><span class="n">milliseconds</span><span class="p">))</span>
|
||||
<a id="__codelineno-3-8" name="__codelineno-3-8" href="#__codelineno-3-8"></a>
|
||||
<a id="__codelineno-3-9" name="__codelineno-3-9" href="#__codelineno-3-9"></a> <span class="c"># Use the discovery manager to find peers on the OddClub topic to greet them</span>
|
||||
<a id="__codelineno-3-10" name="__codelineno-3-10" href="#__codelineno-3-10"></a> <span class="k">let</span> <span class="n">queryOddClub</span> <span class="o">=</span> <span class="n">dm</span><span class="p">.</span><span class="n">request</span><span class="p">(</span><span class="n">RdvNamespace</span><span class="p">(</span><span class="s">"OddClub"</span><span class="p">))</span>
|
||||
<a id="__codelineno-3-11" name="__codelineno-3-11" href="#__codelineno-3-11"></a> <span class="k">for</span> <span class="err">_ in 0..2:</span>
|
||||
<a id="__codelineno-3-12" name="__codelineno-3-12" href="#__codelineno-3-12"></a> <span class="k">let</span>
|
||||
<a id="__codelineno-3-13" name="__codelineno-3-13" href="#__codelineno-3-13"></a> <span class="c"># getPeer give you a PeerAttribute containing informations about the peer.</span>
|
||||
<a id="__codelineno-3-14" name="__codelineno-3-14" href="#__codelineno-3-14"></a> <span class="n">res</span> <span class="o">=</span> <span class="n">await</span> <span class="n">queryOddClub</span><span class="p">.</span><span class="n">getPeer</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-15" name="__codelineno-3-15" href="#__codelineno-3-15"></a> <span class="c"># Here we will use the PeerId and the MultiAddress to greet him</span>
|
||||
<a id="__codelineno-3-16" name="__codelineno-3-16" href="#__codelineno-3-16"></a> <span class="n">conn</span> <span class="o">=</span> <span class="n">await</span> <span class="n">newcomer</span><span class="p">.</span><span class="n">dial</span><span class="p">(</span><span class="n">res</span><span class="o">[</span><span class="n">PeerId</span><span class="o">]</span><span class="p">,</span> <span class="n">res</span><span class="p">.</span><span class="n">getAll</span><span class="p">(</span><span class="n">MultiAddress</span><span class="p">),</span> <span class="n">DumbCodec</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-17" name="__codelineno-3-17" href="#__codelineno-3-17"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="s">"Odd Club suuuucks! Even Gang is better!"</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-18" name="__codelineno-3-18" href="#__codelineno-3-18"></a> <span class="c"># Uh-oh!</span>
|
||||
<a id="__codelineno-3-19" name="__codelineno-3-19" href="#__codelineno-3-19"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-20" name="__codelineno-3-20" href="#__codelineno-3-20"></a> <span class="c"># Wait for the peer to close the stream</span>
|
||||
<a id="__codelineno-3-21" name="__codelineno-3-21" href="#__codelineno-3-21"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">join</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-22" name="__codelineno-3-22" href="#__codelineno-3-22"></a> <span class="c"># Queries will run in a loop, so we must stop them when we are done</span>
|
||||
<a id="__codelineno-3-23" name="__codelineno-3-23" href="#__codelineno-3-23"></a> <span class="n">queryOddClub</span><span class="p">.</span><span class="n">stop</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-9" name="__codelineno-3-9" href="#__codelineno-3-9"></a><span class="w"> </span><span class="c"># Use the discovery manager to find peers on the OddClub topic to greet them</span>
|
||||
<a id="__codelineno-3-10" name="__codelineno-3-10" href="#__codelineno-3-10"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">queryOddClub</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dm</span><span class="p">.</span><span class="n">request</span><span class="p">(</span><span class="n">RdvNamespace</span><span class="p">(</span><span class="s">"OddClub"</span><span class="p">))</span>
|
||||
<a id="__codelineno-3-11" name="__codelineno-3-11" href="#__codelineno-3-11"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="err">_ in 0..2:</span>
|
||||
<a id="__codelineno-3-12" name="__codelineno-3-12" href="#__codelineno-3-12"></a><span class="w"> </span><span class="k">let</span>
|
||||
<a id="__codelineno-3-13" name="__codelineno-3-13" href="#__codelineno-3-13"></a><span class="w"> </span><span class="c"># getPeer give you a PeerAttribute containing informations about the peer.</span>
|
||||
<a id="__codelineno-3-14" name="__codelineno-3-14" href="#__codelineno-3-14"></a><span class="w"> </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">queryOddClub</span><span class="p">.</span><span class="n">getPeer</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-15" name="__codelineno-3-15" href="#__codelineno-3-15"></a><span class="w"> </span><span class="c"># Here we will use the PeerId and the MultiAddress to greet him</span>
|
||||
<a id="__codelineno-3-16" name="__codelineno-3-16" href="#__codelineno-3-16"></a><span class="w"> </span><span class="n">conn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">newcomer</span><span class="p">.</span><span class="n">dial</span><span class="p">(</span><span class="n">res</span><span class="o">[</span><span class="n">PeerId</span><span class="o">]</span><span class="p">,</span><span class="w"> </span><span class="n">res</span><span class="p">.</span><span class="n">getAll</span><span class="p">(</span><span class="n">MultiAddress</span><span class="p">),</span><span class="w"> </span><span class="n">DumbCodec</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-17" name="__codelineno-3-17" href="#__codelineno-3-17"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="s">"Odd Club suuuucks! Even Gang is better!"</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-18" name="__codelineno-3-18" href="#__codelineno-3-18"></a><span class="w"> </span><span class="c"># Uh-oh!</span>
|
||||
<a id="__codelineno-3-19" name="__codelineno-3-19" href="#__codelineno-3-19"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-20" name="__codelineno-3-20" href="#__codelineno-3-20"></a><span class="w"> </span><span class="c"># Wait for the peer to close the stream</span>
|
||||
<a id="__codelineno-3-21" name="__codelineno-3-21" href="#__codelineno-3-21"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">join</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-22" name="__codelineno-3-22" href="#__codelineno-3-22"></a><span class="w"> </span><span class="c"># Queries will run in a loop, so we must stop them when we are done</span>
|
||||
<a id="__codelineno-3-23" name="__codelineno-3-23" href="#__codelineno-3-23"></a><span class="w"> </span><span class="n">queryOddClub</span><span class="p">.</span><span class="n">stop</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-24" name="__codelineno-3-24" href="#__codelineno-3-24"></a>
|
||||
<a id="__codelineno-3-25" name="__codelineno-3-25" href="#__codelineno-3-25"></a> <span class="c"># Maybe it was because he wanted to join the EvenGang</span>
|
||||
<a id="__codelineno-3-26" name="__codelineno-3-26" href="#__codelineno-3-26"></a> <span class="k">let</span> <span class="n">queryEvenGang</span> <span class="o">=</span> <span class="n">dm</span><span class="p">.</span><span class="n">request</span><span class="p">(</span><span class="n">RdvNamespace</span><span class="p">(</span><span class="s">"EvenGang"</span><span class="p">))</span>
|
||||
<a id="__codelineno-3-27" name="__codelineno-3-27" href="#__codelineno-3-27"></a> <span class="k">for</span> <span class="err">_ in 0..2:</span>
|
||||
<a id="__codelineno-3-28" name="__codelineno-3-28" href="#__codelineno-3-28"></a> <span class="k">let</span>
|
||||
<a id="__codelineno-3-29" name="__codelineno-3-29" href="#__codelineno-3-29"></a> <span class="n">res</span> <span class="o">=</span> <span class="n">await</span> <span class="n">queryEvenGang</span><span class="p">.</span><span class="n">getPeer</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-30" name="__codelineno-3-30" href="#__codelineno-3-30"></a> <span class="n">conn</span> <span class="o">=</span> <span class="n">await</span> <span class="n">newcomer</span><span class="p">.</span><span class="n">dial</span><span class="p">(</span><span class="n">res</span><span class="o">[</span><span class="n">PeerId</span><span class="o">]</span><span class="p">,</span> <span class="n">res</span><span class="p">.</span><span class="n">getAll</span><span class="p">(</span><span class="n">MultiAddress</span><span class="p">),</span> <span class="n">DumbCodec</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-31" name="__codelineno-3-31" href="#__codelineno-3-31"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="s">"Even Gang is sooo laaame! Odd Club rocks!"</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-32" name="__codelineno-3-32" href="#__codelineno-3-32"></a> <span class="c"># Or maybe not...</span>
|
||||
<a id="__codelineno-3-33" name="__codelineno-3-33" href="#__codelineno-3-33"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-34" name="__codelineno-3-34" href="#__codelineno-3-34"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">join</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-35" name="__codelineno-3-35" href="#__codelineno-3-35"></a> <span class="n">queryEvenGang</span><span class="p">.</span><span class="n">stop</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-36" name="__codelineno-3-36" href="#__codelineno-3-36"></a> <span class="c"># What can I say, some people just want to watch the world burn... Anyway</span>
|
||||
<a id="__codelineno-3-25" name="__codelineno-3-25" href="#__codelineno-3-25"></a><span class="w"> </span><span class="c"># Maybe it was because he wanted to join the EvenGang</span>
|
||||
<a id="__codelineno-3-26" name="__codelineno-3-26" href="#__codelineno-3-26"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">queryEvenGang</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dm</span><span class="p">.</span><span class="n">request</span><span class="p">(</span><span class="n">RdvNamespace</span><span class="p">(</span><span class="s">"EvenGang"</span><span class="p">))</span>
|
||||
<a id="__codelineno-3-27" name="__codelineno-3-27" href="#__codelineno-3-27"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="err">_ in 0..2:</span>
|
||||
<a id="__codelineno-3-28" name="__codelineno-3-28" href="#__codelineno-3-28"></a><span class="w"> </span><span class="k">let</span>
|
||||
<a id="__codelineno-3-29" name="__codelineno-3-29" href="#__codelineno-3-29"></a><span class="w"> </span><span class="n">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">queryEvenGang</span><span class="p">.</span><span class="n">getPeer</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-30" name="__codelineno-3-30" href="#__codelineno-3-30"></a><span class="w"> </span><span class="n">conn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">newcomer</span><span class="p">.</span><span class="n">dial</span><span class="p">(</span><span class="n">res</span><span class="o">[</span><span class="n">PeerId</span><span class="o">]</span><span class="p">,</span><span class="w"> </span><span class="n">res</span><span class="p">.</span><span class="n">getAll</span><span class="p">(</span><span class="n">MultiAddress</span><span class="p">),</span><span class="w"> </span><span class="n">DumbCodec</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-31" name="__codelineno-3-31" href="#__codelineno-3-31"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="s">"Even Gang is sooo laaame! Odd Club rocks!"</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-32" name="__codelineno-3-32" href="#__codelineno-3-32"></a><span class="w"> </span><span class="c"># Or maybe not...</span>
|
||||
<a id="__codelineno-3-33" name="__codelineno-3-33" href="#__codelineno-3-33"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-34" name="__codelineno-3-34" href="#__codelineno-3-34"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">join</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-35" name="__codelineno-3-35" href="#__codelineno-3-35"></a><span class="w"> </span><span class="n">queryEvenGang</span><span class="p">.</span><span class="n">stop</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-36" name="__codelineno-3-36" href="#__codelineno-3-36"></a><span class="w"> </span><span class="c"># What can I say, some people just want to watch the world burn... Anyway</span>
|
||||
<a id="__codelineno-3-37" name="__codelineno-3-37" href="#__codelineno-3-37"></a>
|
||||
<a id="__codelineno-3-38" name="__codelineno-3-38" href="#__codelineno-3-38"></a> <span class="c"># Stop all the discovery managers</span>
|
||||
<a id="__codelineno-3-39" name="__codelineno-3-39" href="#__codelineno-3-39"></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">discManagers</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-40" name="__codelineno-3-40" href="#__codelineno-3-40"></a> <span class="n">d</span><span class="p">.</span><span class="n">stop</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-41" name="__codelineno-3-41" href="#__codelineno-3-41"></a> <span class="n">dm</span><span class="p">.</span><span class="n">stop</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-38" name="__codelineno-3-38" href="#__codelineno-3-38"></a><span class="w"> </span><span class="c"># Stop all the discovery managers</span>
|
||||
<a id="__codelineno-3-39" name="__codelineno-3-39" href="#__codelineno-3-39"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">d</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">discManagers</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-40" name="__codelineno-3-40" href="#__codelineno-3-40"></a><span class="w"> </span><span class="n">d</span><span class="p">.</span><span class="n">stop</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-41" name="__codelineno-3-41" href="#__codelineno-3-41"></a><span class="w"> </span><span class="n">dm</span><span class="p">.</span><span class="n">stop</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-42" name="__codelineno-3-42" href="#__codelineno-3-42"></a>
|
||||
<a id="__codelineno-3-43" name="__codelineno-3-43" href="#__codelineno-3-43"></a> <span class="c"># Stop all the switches</span>
|
||||
<a id="__codelineno-3-44" name="__codelineno-3-44" href="#__codelineno-3-44"></a> <span class="n">await</span> <span class="n">allFutures</span><span class="p">(</span><span class="n">switches</span><span class="p">.</span><span class="n">mapIt</span><span class="p">(</span><span class="n">it</span><span class="p">.</span><span class="n">stop</span><span class="p">()))</span>
|
||||
<a id="__codelineno-3-45" name="__codelineno-3-45" href="#__codelineno-3-45"></a> <span class="n">await</span> <span class="n">allFutures</span><span class="p">(</span><span class="n">bootNode</span><span class="p">.</span><span class="n">stop</span><span class="p">(),</span> <span class="n">newcomer</span><span class="p">.</span><span class="n">stop</span><span class="p">())</span>
|
||||
<a id="__codelineno-3-43" name="__codelineno-3-43" href="#__codelineno-3-43"></a><span class="w"> </span><span class="c"># Stop all the switches</span>
|
||||
<a id="__codelineno-3-44" name="__codelineno-3-44" href="#__codelineno-3-44"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">allFutures</span><span class="p">(</span><span class="n">switches</span><span class="p">.</span><span class="n">mapIt</span><span class="p">(</span><span class="n">it</span><span class="p">.</span><span class="n">stop</span><span class="p">()))</span>
|
||||
<a id="__codelineno-3-45" name="__codelineno-3-45" href="#__codelineno-3-45"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">allFutures</span><span class="p">(</span><span class="n">bootNode</span><span class="p">.</span><span class="n">stop</span><span class="p">(),</span><span class="w"> </span><span class="n">newcomer</span><span class="p">.</span><span class="n">stop</span><span class="p">())</span>
|
||||
<a id="__codelineno-3-46" name="__codelineno-3-46" href="#__codelineno-3-46"></a>
|
||||
<a id="__codelineno-3-47" name="__codelineno-3-47" href="#__codelineno-3-47"></a><span class="n">waitFor</span><span class="p">(</span><span class="n">main</span><span class="p">())</span>
|
||||
</code></pre></div>
|
||||
@ -620,42 +632,6 @@ it to discover peers & greet them.</p>
|
||||
|
||||
<footer class="md-footer">
|
||||
|
||||
|
||||
<nav class="md-footer__inner md-grid" aria-label="Footer" >
|
||||
|
||||
|
||||
<a href="../tutorial_4_gossipsub/" class="md-footer__link md-footer__link--prev" aria-label="Previous: GossipSub" rel="prev">
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
||||
</div>
|
||||
<div class="md-footer__title">
|
||||
<div class="md-ellipsis">
|
||||
<span class="md-footer__direction">
|
||||
Previous
|
||||
</span>
|
||||
GossipSub
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a href="../tutorial_6_game/" class="md-footer__link md-footer__link--next" aria-label="Next: Game" rel="next">
|
||||
<div class="md-footer__title">
|
||||
<div class="md-ellipsis">
|
||||
<span class="md-footer__direction">
|
||||
Next
|
||||
</span>
|
||||
Game
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
</nav>
|
||||
|
||||
<div class="md-footer-meta md-typeset">
|
||||
<div class="md-footer-meta__inner md-grid">
|
||||
<div class="md-copyright">
|
||||
@ -677,10 +653,10 @@ it to discover peers & greet them.</p>
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.instant", "search.highlight"], "search": "../assets/javascripts/workers/search.16e2a7d4.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script>
|
||||
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.instant", "search.highlight"], "search": "../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.8492ddcf.min.js"></script>
|
||||
<script src="../assets/javascripts/bundle.b4d07000.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
@ -157,7 +157,7 @@ proc new(T: typedesc[GameProto], g: Game): T =
|
||||
# The handler of a protocol must wait for the stream to
|
||||
# be finished before returning
|
||||
await conn.join()
|
||||
return T(codecs: @["/tron/1.0.0"], handler: handle)
|
||||
return T.new(codecs = @["/tron/1.0.0"], handler = handle)
|
||||
|
||||
proc networking(g: Game) {.async.} =
|
||||
# Create our switch, similar to the GossipSub example and
|
||||
|
@ -10,8 +10,14 @@
|
||||
|
||||
<link rel="canonical" href="https://status-im.github.io/nim-libp2p/docs/tutorial_6_game/">
|
||||
|
||||
<link rel="icon" href="https://docs.libp2p.io/images/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.1, mkdocs-material-8.5.7">
|
||||
|
||||
<link rel="prev" href="../tutorial_5_discovery/">
|
||||
|
||||
|
||||
<link rel="next" href="../circuitrelay/">
|
||||
|
||||
<link rel="icon" href="https://libp2p.io/img/logo_small.png">
|
||||
<meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.15">
|
||||
|
||||
|
||||
|
||||
@ -19,11 +25,10 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.20d9efc8.min.css">
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.26e3688c.min.css">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/palette.cbb835fc.min.css">
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/palette.ecc896b0.min.css">
|
||||
|
||||
|
||||
|
||||
@ -56,7 +61,7 @@
|
||||
|
||||
|
||||
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="">
|
||||
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo">
|
||||
|
||||
|
||||
|
||||
@ -80,11 +85,13 @@
|
||||
|
||||
|
||||
|
||||
<header class="md-header" data-md-component="header">
|
||||
|
||||
|
||||
<header class="md-header md-header--shadow" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href=".." title="nim-libp2p" class="md-header__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
@ -107,27 +114,31 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
<form class="md-header__option" data-md-component="palette">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3Z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
|
||||
|
||||
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6zm0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4zM7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></svg>
|
||||
</label>
|
||||
|
||||
|
||||
</form>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
|
||||
@ -157,7 +168,7 @@
|
||||
<div class="md-search-result__meta">
|
||||
Initializing search
|
||||
</div>
|
||||
<ol class="md-search-result__list"></ol>
|
||||
<ol class="md-search-result__list" role="presentation"></ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -169,7 +180,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -203,7 +214,7 @@
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href=".." title="nim-libp2p" class="md-nav__button md-logo" aria-label="nim-libp2p" data-md-component="logo">
|
||||
|
||||
<img src="https://docs.libp2p.io/images/logo_small.png" alt="logo">
|
||||
<img src="https://libp2p.io/img/logo_small.png" alt="logo">
|
||||
|
||||
</a>
|
||||
nim-libp2p
|
||||
@ -213,7 +224,7 @@
|
||||
<a href="https://github.com/status-im/nim-libp2p" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
status-im/nim-libp2p
|
||||
@ -236,17 +247,18 @@
|
||||
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_1" type="checkbox" id="__nav_1" checked>
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" checked>
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_1">
|
||||
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
|
||||
Tutorials
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" aria-label="Tutorials" data-md-level="1">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_1">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
Tutorials
|
||||
@ -346,7 +358,7 @@
|
||||
|
||||
<li class="md-nav__item md-nav__item--active">
|
||||
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
|
||||
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
||||
|
||||
|
||||
|
||||
@ -501,46 +513,46 @@ all of the features we talked about in the last tutorials.</p>
|
||||
as a game engine. (you need to run <code>nimble install nico</code> to have it available)</p>
|
||||
<p><img alt="multiplay" src="https://user-images.githubusercontent.com/13471753/198852714-b55048e3-f233-4723-900d-2193ad259fe1.gif" /></p>
|
||||
<p>We will start by importing our dependencies and creating our types
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kn">import</span> <span class="n">os</span>
|
||||
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">import</span> <span class="n">nico</span><span class="p">,</span> <span class="n">chronos</span><span class="p">,</span> <span class="n">stew</span><span class="o">/</span><span class="n">byteutils</span><span class="p">,</span> <span class="n">stew</span><span class="o">/</span><span class="n">endians2</span>
|
||||
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="kn">import</span> <span class="n">libp2p</span>
|
||||
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="kn">import</span> <span class="n">libp2p</span><span class="o">/</span><span class="n">protocols</span><span class="o">/</span><span class="n">rendezvous</span>
|
||||
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="kn">import</span> <span class="n">libp2p</span><span class="o">/</span><span class="n">discovery</span><span class="o">/</span><span class="n">rendezvousinterface</span>
|
||||
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="kn">import</span> <span class="n">libp2p</span><span class="o">/</span><span class="n">discovery</span><span class="o">/</span><span class="n">discoverymngr</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="kn">import</span><span class="w"> </span><span class="n">os</span>
|
||||
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="kn">import</span><span class="w"> </span><span class="n">nico</span><span class="p">,</span><span class="w"> </span><span class="n">chronos</span><span class="p">,</span><span class="w"> </span><span class="n">stew</span><span class="o">/</span><span class="n">byteutils</span><span class="p">,</span><span class="w"> </span><span class="n">stew</span><span class="o">/</span><span class="n">endians2</span>
|
||||
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="kn">import</span><span class="w"> </span><span class="n">libp2p</span>
|
||||
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="kn">import</span><span class="w"> </span><span class="n">libp2p</span><span class="o">/</span><span class="n">protocols</span><span class="o">/</span><span class="n">rendezvous</span>
|
||||
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="kn">import</span><span class="w"> </span><span class="n">libp2p</span><span class="o">/</span><span class="n">discovery</span><span class="o">/</span><span class="n">rendezvousinterface</span>
|
||||
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="kn">import</span><span class="w"> </span><span class="n">libp2p</span><span class="o">/</span><span class="n">discovery</span><span class="o">/</span><span class="n">discoverymngr</span>
|
||||
<a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a>
|
||||
<a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="k">const</span>
|
||||
<a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a> <span class="n">directions</span> <span class="o">=</span> <span class="o">@[</span><span class="p">(</span><span class="n">K_UP</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="n">K_LEFT</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="n">K_DOWN</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="n">K_RIGHT</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span><span class="o">]</span>
|
||||
<a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a> <span class="n">mapSize</span> <span class="o">=</span> <span class="mi">32</span>
|
||||
<a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a> <span class="n">tickPeriod</span> <span class="o">=</span> <span class="mf">0.2</span>
|
||||
<a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a><span class="w"> </span><span class="n">directions</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">@[</span><span class="p">(</span><span class="n">K_UP</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">K_LEFT</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">K_DOWN</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="n">K_RIGHT</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="o">]</span>
|
||||
<a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a><span class="w"> </span><span class="n">mapSize</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">32</span>
|
||||
<a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a><span class="w"> </span><span class="n">tickPeriod</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0.2</span>
|
||||
<a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a>
|
||||
<a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a><span class="k">type</span>
|
||||
<a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a> <span class="n">Player</span> <span class="o">=</span> <span class="k">ref</span> <span class="k">object</span>
|
||||
<a id="__codelineno-0-15" name="__codelineno-0-15" href="#__codelineno-0-15"></a> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="nb">int</span>
|
||||
<a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a> <span class="n">currentDir</span><span class="p">,</span> <span class="n">nextDir</span><span class="p">:</span> <span class="nb">int</span>
|
||||
<a id="__codelineno-0-17" name="__codelineno-0-17" href="#__codelineno-0-17"></a> <span class="n">lost</span><span class="p">:</span> <span class="nb">bool</span>
|
||||
<a id="__codelineno-0-18" name="__codelineno-0-18" href="#__codelineno-0-18"></a> <span class="n">color</span><span class="p">:</span> <span class="nb">int</span>
|
||||
<a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a><span class="w"> </span><span class="n">Player</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">ref</span><span class="w"> </span><span class="k">object</span>
|
||||
<a id="__codelineno-0-15" name="__codelineno-0-15" href="#__codelineno-0-15"></a><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">y</span><span class="p">:</span><span class="w"> </span><span class="nb">int</span>
|
||||
<a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a><span class="w"> </span><span class="n">currentDir</span><span class="p">,</span><span class="w"> </span><span class="n">nextDir</span><span class="p">:</span><span class="w"> </span><span class="nb">int</span>
|
||||
<a id="__codelineno-0-17" name="__codelineno-0-17" href="#__codelineno-0-17"></a><span class="w"> </span><span class="n">lost</span><span class="p">:</span><span class="w"> </span><span class="nb">bool</span>
|
||||
<a id="__codelineno-0-18" name="__codelineno-0-18" href="#__codelineno-0-18"></a><span class="w"> </span><span class="n">color</span><span class="p">:</span><span class="w"> </span><span class="nb">int</span>
|
||||
<a id="__codelineno-0-19" name="__codelineno-0-19" href="#__codelineno-0-19"></a>
|
||||
<a id="__codelineno-0-20" name="__codelineno-0-20" href="#__codelineno-0-20"></a> <span class="n">Game</span> <span class="o">=</span> <span class="k">ref</span> <span class="k">object</span>
|
||||
<a id="__codelineno-0-21" name="__codelineno-0-21" href="#__codelineno-0-21"></a> <span class="n">gameMap</span><span class="p">:</span> <span class="nb">array</span><span class="o">[</span><span class="n">mapSize</span> <span class="o">*</span> <span class="n">mapSize</span><span class="p">,</span> <span class="nb">int</span><span class="o">]</span>
|
||||
<a id="__codelineno-0-22" name="__codelineno-0-22" href="#__codelineno-0-22"></a> <span class="n">tickTime</span><span class="p">:</span> <span class="nb">float</span>
|
||||
<a id="__codelineno-0-23" name="__codelineno-0-23" href="#__codelineno-0-23"></a> <span class="n">localPlayer</span><span class="p">,</span> <span class="n">remotePlayer</span><span class="p">:</span> <span class="n">Player</span>
|
||||
<a id="__codelineno-0-24" name="__codelineno-0-24" href="#__codelineno-0-24"></a> <span class="n">peerFound</span><span class="p">:</span> <span class="n">Future</span><span class="o">[</span><span class="n">Connection</span><span class="o">]</span>
|
||||
<a id="__codelineno-0-25" name="__codelineno-0-25" href="#__codelineno-0-25"></a> <span class="n">hasCandidate</span><span class="p">:</span> <span class="nb">bool</span>
|
||||
<a id="__codelineno-0-26" name="__codelineno-0-26" href="#__codelineno-0-26"></a> <span class="n">tickFinished</span><span class="p">:</span> <span class="n">Future</span><span class="o">[</span><span class="nb">int</span><span class="o">]</span>
|
||||
<a id="__codelineno-0-20" name="__codelineno-0-20" href="#__codelineno-0-20"></a><span class="w"> </span><span class="n">Game</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">ref</span><span class="w"> </span><span class="k">object</span>
|
||||
<a id="__codelineno-0-21" name="__codelineno-0-21" href="#__codelineno-0-21"></a><span class="w"> </span><span class="n">gameMap</span><span class="p">:</span><span class="w"> </span><span class="nb">array</span><span class="o">[</span><span class="n">mapSize</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">mapSize</span><span class="p">,</span><span class="w"> </span><span class="nb">int</span><span class="o">]</span>
|
||||
<a id="__codelineno-0-22" name="__codelineno-0-22" href="#__codelineno-0-22"></a><span class="w"> </span><span class="n">tickTime</span><span class="p">:</span><span class="w"> </span><span class="nb">float</span>
|
||||
<a id="__codelineno-0-23" name="__codelineno-0-23" href="#__codelineno-0-23"></a><span class="w"> </span><span class="n">localPlayer</span><span class="p">,</span><span class="w"> </span><span class="n">remotePlayer</span><span class="p">:</span><span class="w"> </span><span class="n">Player</span>
|
||||
<a id="__codelineno-0-24" name="__codelineno-0-24" href="#__codelineno-0-24"></a><span class="w"> </span><span class="n">peerFound</span><span class="p">:</span><span class="w"> </span><span class="n">Future</span><span class="o">[</span><span class="n">Connection</span><span class="o">]</span>
|
||||
<a id="__codelineno-0-25" name="__codelineno-0-25" href="#__codelineno-0-25"></a><span class="w"> </span><span class="n">hasCandidate</span><span class="p">:</span><span class="w"> </span><span class="nb">bool</span>
|
||||
<a id="__codelineno-0-26" name="__codelineno-0-26" href="#__codelineno-0-26"></a><span class="w"> </span><span class="n">tickFinished</span><span class="p">:</span><span class="w"> </span><span class="n">Future</span><span class="o">[</span><span class="nb">int</span><span class="o">]</span>
|
||||
<a id="__codelineno-0-27" name="__codelineno-0-27" href="#__codelineno-0-27"></a>
|
||||
<a id="__codelineno-0-28" name="__codelineno-0-28" href="#__codelineno-0-28"></a> <span class="n">GameProto</span> <span class="o">=</span> <span class="k">ref</span> <span class="k">object</span> <span class="k">of</span> <span class="n">LPProtocol</span>
|
||||
<a id="__codelineno-0-28" name="__codelineno-0-28" href="#__codelineno-0-28"></a><span class="w"> </span><span class="n">GameProto</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">ref</span><span class="w"> </span><span class="k">object</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="n">LPProtocol</span>
|
||||
<a id="__codelineno-0-29" name="__codelineno-0-29" href="#__codelineno-0-29"></a>
|
||||
<a id="__codelineno-0-30" name="__codelineno-0-30" href="#__codelineno-0-30"></a><span class="k">proc </span><span class="nf">new</span><span class="p">(</span><span class="err">_: type[Game]): Game =</span>
|
||||
<a id="__codelineno-0-31" name="__codelineno-0-31" href="#__codelineno-0-31"></a> <span class="c"># Default state of a game</span>
|
||||
<a id="__codelineno-0-32" name="__codelineno-0-32" href="#__codelineno-0-32"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">Game</span><span class="p">(</span>
|
||||
<a id="__codelineno-0-33" name="__codelineno-0-33" href="#__codelineno-0-33"></a> <span class="n">tickTime</span><span class="p">:</span> <span class="o">-</span><span class="mf">3.0</span><span class="p">,</span> <span class="c"># 3 seconds of "warm-up" time</span>
|
||||
<a id="__codelineno-0-34" name="__codelineno-0-34" href="#__codelineno-0-34"></a> <span class="n">localPlayer</span><span class="p">:</span> <span class="n">Player</span><span class="p">(</span><span class="n">x</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="mi">16</span><span class="p">,</span> <span class="n">currentDir</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> <span class="n">nextDir</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> <span class="n">color</span><span class="p">:</span> <span class="mi">8</span><span class="p">),</span>
|
||||
<a id="__codelineno-0-35" name="__codelineno-0-35" href="#__codelineno-0-35"></a> <span class="n">remotePlayer</span><span class="p">:</span> <span class="n">Player</span><span class="p">(</span><span class="n">x</span><span class="p">:</span> <span class="mi">27</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="mi">16</span><span class="p">,</span> <span class="n">currentDir</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="n">nextDir</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="n">color</span><span class="p">:</span> <span class="mi">12</span><span class="p">),</span>
|
||||
<a id="__codelineno-0-36" name="__codelineno-0-36" href="#__codelineno-0-36"></a> <span class="n">peerFound</span><span class="p">:</span> <span class="n">newFuture</span><span class="o">[</span><span class="n">Connection</span><span class="o">]</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-37" name="__codelineno-0-37" href="#__codelineno-0-37"></a> <span class="p">)</span>
|
||||
<a id="__codelineno-0-38" name="__codelineno-0-38" href="#__codelineno-0-38"></a> <span class="k">for</span> <span class="n">pos</span> <span class="ow">in</span> <span class="mi">0</span> <span class="p">..</span> <span class="n">result</span><span class="p">.</span><span class="n">gameMap</span><span class="p">.</span><span class="n">high</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-39" name="__codelineno-0-39" href="#__codelineno-0-39"></a> <span class="k">if</span> <span class="n">pos</span> <span class="ow">mod</span> <span class="n">mapSize</span> <span class="ow">in</span> <span class="o">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">mapSize</span> <span class="o">-</span> <span class="mi">1</span><span class="o">]</span> <span class="ow">or</span> <span class="n">pos</span> <span class="ow">div</span> <span class="n">mapSize</span> <span class="ow">in</span> <span class="o">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">mapSize</span> <span class="o">-</span> <span class="mi">1</span><span class="o">]</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-40" name="__codelineno-0-40" href="#__codelineno-0-40"></a> <span class="n">result</span><span class="p">.</span><span class="n">gameMap</span><span class="o">[</span><span class="n">pos</span><span class="o">]</span> <span class="o">=</span> <span class="mi">7</span>
|
||||
<a id="__codelineno-0-30" name="__codelineno-0-30" href="#__codelineno-0-30"></a><span class="k">proc</span><span class="w"> </span><span class="nf">new</span><span class="p">(</span><span class="err">_: type[Game]): Game =</span>
|
||||
<a id="__codelineno-0-31" name="__codelineno-0-31" href="#__codelineno-0-31"></a><span class="w"> </span><span class="c"># Default state of a game</span>
|
||||
<a id="__codelineno-0-32" name="__codelineno-0-32" href="#__codelineno-0-32"></a><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Game</span><span class="p">(</span>
|
||||
<a id="__codelineno-0-33" name="__codelineno-0-33" href="#__codelineno-0-33"></a><span class="w"> </span><span class="n">tickTime</span><span class="p">:</span><span class="w"> </span><span class="o">-</span><span class="mf">3.0</span><span class="p">,</span><span class="w"> </span><span class="c"># 3 seconds of "warm-up" time</span>
|
||||
<a id="__codelineno-0-34" name="__codelineno-0-34" href="#__codelineno-0-34"></a><span class="w"> </span><span class="n">localPlayer</span><span class="p">:</span><span class="w"> </span><span class="n">Player</span><span class="p">(</span><span class="n">x</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="n">y</span><span class="p">:</span><span class="w"> </span><span class="mi">16</span><span class="p">,</span><span class="w"> </span><span class="n">currentDir</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="n">nextDir</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="n">color</span><span class="p">:</span><span class="w"> </span><span class="mi">8</span><span class="p">),</span>
|
||||
<a id="__codelineno-0-35" name="__codelineno-0-35" href="#__codelineno-0-35"></a><span class="w"> </span><span class="n">remotePlayer</span><span class="p">:</span><span class="w"> </span><span class="n">Player</span><span class="p">(</span><span class="n">x</span><span class="p">:</span><span class="w"> </span><span class="mi">27</span><span class="p">,</span><span class="w"> </span><span class="n">y</span><span class="p">:</span><span class="w"> </span><span class="mi">16</span><span class="p">,</span><span class="w"> </span><span class="n">currentDir</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">nextDir</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">color</span><span class="p">:</span><span class="w"> </span><span class="mi">12</span><span class="p">),</span>
|
||||
<a id="__codelineno-0-36" name="__codelineno-0-36" href="#__codelineno-0-36"></a><span class="w"> </span><span class="n">peerFound</span><span class="p">:</span><span class="w"> </span><span class="n">newFuture</span><span class="o">[</span><span class="n">Connection</span><span class="o">]</span><span class="p">()</span>
|
||||
<a id="__codelineno-0-37" name="__codelineno-0-37" href="#__codelineno-0-37"></a><span class="w"> </span><span class="p">)</span>
|
||||
<a id="__codelineno-0-38" name="__codelineno-0-38" href="#__codelineno-0-38"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">pos</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">..</span><span class="w"> </span><span class="n">result</span><span class="p">.</span><span class="n">gameMap</span><span class="p">.</span><span class="n">high</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-39" name="__codelineno-0-39" href="#__codelineno-0-39"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">pos</span><span class="w"> </span><span class="ow">mod</span><span class="w"> </span><span class="n">mapSize</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="o">[</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">mapSize</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="o">]</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">pos</span><span class="w"> </span><span class="ow">div</span><span class="w"> </span><span class="n">mapSize</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="o">[</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">mapSize</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="o">]</span><span class="p">:</span>
|
||||
<a id="__codelineno-0-40" name="__codelineno-0-40" href="#__codelineno-0-40"></a><span class="w"> </span><span class="n">result</span><span class="p">.</span><span class="n">gameMap</span><span class="o">[</span><span class="n">pos</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">7</span>
|
||||
</code></pre></div></p>
|
||||
<h2 id="game-logic">Game Logic</h2>
|
||||
<p>The networking during the game will work like this:</p>
|
||||
@ -557,64 +569,64 @@ video games is an <a href="https://developer.valvesoftware.com/wiki/Latency_Comp
|
||||
<p>The main drawback of this scheme is that the more ping you have with
|
||||
the peer, the slower the game will run. Or invertedly, the less ping you
|
||||
have, the faster it runs!
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="k">proc </span><span class="nf">update</span><span class="p">(</span><span class="n">g</span><span class="p">:</span> <span class="n">Game</span><span class="p">,</span> <span class="n">dt</span><span class="p">:</span> <span class="nb">float32</span><span class="p">)</span> <span class="o">=</span>
|
||||
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a> <span class="c"># Will be called at each frame of the game.</span>
|
||||
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a> <span class="c">#</span>
|
||||
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a> <span class="c"># Because both Nico and Chronos have a main loop,</span>
|
||||
<a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a> <span class="c"># they must share the control of the main thread.</span>
|
||||
<a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a> <span class="c"># This is a hacky way to make this happen</span>
|
||||
<a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a> <span class="n">waitFor</span><span class="p">(</span><span class="n">sleepAsync</span><span class="p">(</span><span class="mf">1.</span><span class="n">milliseconds</span><span class="p">))</span>
|
||||
<a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a> <span class="c"># Don't do anything if we are still waiting for an opponent</span>
|
||||
<a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a> <span class="k">if</span> <span class="ow">not</span><span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">peerFound</span><span class="p">.</span><span class="n">finished</span><span class="p">())</span> <span class="ow">or</span> <span class="n">isNil</span><span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">tickFinished</span><span class="p">):</span> <span class="k">return</span>
|
||||
<a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a> <span class="n">g</span><span class="p">.</span><span class="n">tickTime</span> <span class="o">+=</span> <span class="n">dt</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="k">proc</span><span class="w"> </span><span class="nf">update</span><span class="p">(</span><span class="n">g</span><span class="p">:</span><span class="w"> </span><span class="n">Game</span><span class="p">,</span><span class="w"> </span><span class="n">dt</span><span class="p">:</span><span class="w"> </span><span class="nb">float32</span><span class="p">)</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a><span class="w"> </span><span class="c"># Will be called at each frame of the game.</span>
|
||||
<a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a><span class="w"> </span><span class="c">#</span>
|
||||
<a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a><span class="w"> </span><span class="c"># Because both Nico and Chronos have a main loop,</span>
|
||||
<a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a><span class="w"> </span><span class="c"># they must share the control of the main thread.</span>
|
||||
<a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a><span class="w"> </span><span class="c"># This is a hacky way to make this happen</span>
|
||||
<a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a><span class="w"> </span><span class="n">waitFor</span><span class="p">(</span><span class="n">sleepAsync</span><span class="p">(</span><span class="mf">1.</span><span class="n">milliseconds</span><span class="p">))</span>
|
||||
<a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a><span class="w"> </span><span class="c"># Don't do anything if we are still waiting for an opponent</span>
|
||||
<a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">peerFound</span><span class="p">.</span><span class="n">finished</span><span class="p">())</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">isNil</span><span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">tickFinished</span><span class="p">):</span><span class="w"> </span><span class="k">return</span>
|
||||
<a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">tickTime</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">dt</span>
|
||||
<a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a>
|
||||
<a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a> <span class="c"># Update the wanted direction, making sure we can't go backward</span>
|
||||
<a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="mi">0</span> <span class="p">..</span> <span class="n">directions</span><span class="p">.</span><span class="n">high</span><span class="p">:</span>
|
||||
<a id="__codelineno-1-14" name="__codelineno-1-14" href="#__codelineno-1-14"></a> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">.</span><span class="n">currentDir</span> <span class="o">+</span> <span class="mi">2</span> <span class="ow">mod</span> <span class="mi">4</span><span class="p">)</span> <span class="ow">and</span> <span class="n">keyp</span><span class="p">(</span><span class="n">directions</span><span class="o">[</span><span class="n">i</span><span class="o">][</span><span class="mi">0</span><span class="o">]</span><span class="p">):</span>
|
||||
<a id="__codelineno-1-15" name="__codelineno-1-15" href="#__codelineno-1-15"></a> <span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">.</span><span class="n">nextDir</span> <span class="o">=</span> <span class="n">i</span>
|
||||
<a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a><span class="w"> </span><span class="c"># Update the wanted direction, making sure we can't go backward</span>
|
||||
<a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">..</span><span class="w"> </span><span class="n">directions</span><span class="p">.</span><span class="n">high</span><span class="p">:</span>
|
||||
<a id="__codelineno-1-14" name="__codelineno-1-14" href="#__codelineno-1-14"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">.</span><span class="n">currentDir</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="ow">mod</span><span class="w"> </span><span class="mi">4</span><span class="p">)</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">keyp</span><span class="p">(</span><span class="n">directions</span><span class="o">[</span><span class="n">i</span><span class="o">][</span><span class="mi">0</span><span class="o">]</span><span class="p">):</span>
|
||||
<a id="__codelineno-1-15" name="__codelineno-1-15" href="#__codelineno-1-15"></a><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">.</span><span class="n">nextDir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">i</span>
|
||||
<a id="__codelineno-1-16" name="__codelineno-1-16" href="#__codelineno-1-16"></a>
|
||||
<a id="__codelineno-1-17" name="__codelineno-1-17" href="#__codelineno-1-17"></a> <span class="k">if</span> <span class="n">g</span><span class="p">.</span><span class="n">tickTime</span> <span class="o">></span> <span class="n">tickPeriod</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="p">.</span><span class="n">tickFinished</span><span class="p">.</span><span class="n">finished</span><span class="p">():</span>
|
||||
<a id="__codelineno-1-18" name="__codelineno-1-18" href="#__codelineno-1-18"></a> <span class="c"># We choosen our next direction, let the networking know</span>
|
||||
<a id="__codelineno-1-19" name="__codelineno-1-19" href="#__codelineno-1-19"></a> <span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">.</span><span class="n">currentDir</span> <span class="o">=</span> <span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">.</span><span class="n">nextDir</span>
|
||||
<a id="__codelineno-1-20" name="__codelineno-1-20" href="#__codelineno-1-20"></a> <span class="n">g</span><span class="p">.</span><span class="n">tickFinished</span><span class="p">.</span><span class="n">complete</span><span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">.</span><span class="n">currentDir</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-17" name="__codelineno-1-17" href="#__codelineno-1-17"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">tickTime</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="n">tickPeriod</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">tickFinished</span><span class="p">.</span><span class="n">finished</span><span class="p">():</span>
|
||||
<a id="__codelineno-1-18" name="__codelineno-1-18" href="#__codelineno-1-18"></a><span class="w"> </span><span class="c"># We choosen our next direction, let the networking know</span>
|
||||
<a id="__codelineno-1-19" name="__codelineno-1-19" href="#__codelineno-1-19"></a><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">.</span><span class="n">currentDir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">.</span><span class="n">nextDir</span>
|
||||
<a id="__codelineno-1-20" name="__codelineno-1-20" href="#__codelineno-1-20"></a><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">tickFinished</span><span class="p">.</span><span class="n">complete</span><span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">.</span><span class="n">currentDir</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-21" name="__codelineno-1-21" href="#__codelineno-1-21"></a>
|
||||
<a id="__codelineno-1-22" name="__codelineno-1-22" href="#__codelineno-1-22"></a><span class="k">proc </span><span class="nf">tick</span><span class="p">(</span><span class="n">g</span><span class="p">:</span> <span class="n">Game</span><span class="p">,</span> <span class="n">p</span><span class="p">:</span> <span class="n">Player</span><span class="p">)</span> <span class="o">=</span>
|
||||
<a id="__codelineno-1-23" name="__codelineno-1-23" href="#__codelineno-1-23"></a> <span class="c"># Move player and check if he lost</span>
|
||||
<a id="__codelineno-1-24" name="__codelineno-1-24" href="#__codelineno-1-24"></a> <span class="n">p</span><span class="p">.</span><span class="n">x</span> <span class="o">+=</span> <span class="n">directions</span><span class="o">[</span><span class="n">p</span><span class="p">.</span><span class="n">currentDir</span><span class="o">][</span><span class="mi">1</span><span class="o">]</span>
|
||||
<a id="__codelineno-1-25" name="__codelineno-1-25" href="#__codelineno-1-25"></a> <span class="n">p</span><span class="p">.</span><span class="n">y</span> <span class="o">+=</span> <span class="n">directions</span><span class="o">[</span><span class="n">p</span><span class="p">.</span><span class="n">currentDir</span><span class="o">][</span><span class="mi">2</span><span class="o">]</span>
|
||||
<a id="__codelineno-1-26" name="__codelineno-1-26" href="#__codelineno-1-26"></a> <span class="k">if</span> <span class="n">g</span><span class="p">.</span><span class="n">gameMap</span><span class="o">[</span><span class="n">p</span><span class="p">.</span><span class="n">y</span> <span class="o">*</span> <span class="n">mapSize</span> <span class="o">+</span> <span class="n">p</span><span class="p">.</span><span class="n">x</span><span class="o">]</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> <span class="n">p</span><span class="p">.</span><span class="n">lost</span> <span class="o">=</span> <span class="kp">true</span>
|
||||
<a id="__codelineno-1-27" name="__codelineno-1-27" href="#__codelineno-1-27"></a> <span class="n">g</span><span class="p">.</span><span class="n">gameMap</span><span class="o">[</span><span class="n">p</span><span class="p">.</span><span class="n">y</span> <span class="o">*</span> <span class="n">mapSize</span> <span class="o">+</span> <span class="n">p</span><span class="p">.</span><span class="n">x</span><span class="o">]</span> <span class="o">=</span> <span class="n">p</span><span class="p">.</span><span class="n">color</span>
|
||||
<a id="__codelineno-1-22" name="__codelineno-1-22" href="#__codelineno-1-22"></a><span class="k">proc</span><span class="w"> </span><span class="nf">tick</span><span class="p">(</span><span class="n">g</span><span class="p">:</span><span class="w"> </span><span class="n">Game</span><span class="p">,</span><span class="w"> </span><span class="n">p</span><span class="p">:</span><span class="w"> </span><span class="n">Player</span><span class="p">)</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-1-23" name="__codelineno-1-23" href="#__codelineno-1-23"></a><span class="w"> </span><span class="c"># Move player and check if he lost</span>
|
||||
<a id="__codelineno-1-24" name="__codelineno-1-24" href="#__codelineno-1-24"></a><span class="w"> </span><span class="n">p</span><span class="p">.</span><span class="n">x</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">directions</span><span class="o">[</span><span class="n">p</span><span class="p">.</span><span class="n">currentDir</span><span class="o">][</span><span class="mi">1</span><span class="o">]</span>
|
||||
<a id="__codelineno-1-25" name="__codelineno-1-25" href="#__codelineno-1-25"></a><span class="w"> </span><span class="n">p</span><span class="p">.</span><span class="n">y</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">directions</span><span class="o">[</span><span class="n">p</span><span class="p">.</span><span class="n">currentDir</span><span class="o">][</span><span class="mi">2</span><span class="o">]</span>
|
||||
<a id="__codelineno-1-26" name="__codelineno-1-26" href="#__codelineno-1-26"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">gameMap</span><span class="o">[</span><span class="n">p</span><span class="p">.</span><span class="n">y</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">mapSize</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">p</span><span class="p">.</span><span class="n">x</span><span class="o">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">:</span><span class="w"> </span><span class="n">p</span><span class="p">.</span><span class="n">lost</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kp">true</span>
|
||||
<a id="__codelineno-1-27" name="__codelineno-1-27" href="#__codelineno-1-27"></a><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">gameMap</span><span class="o">[</span><span class="n">p</span><span class="p">.</span><span class="n">y</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">mapSize</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">p</span><span class="p">.</span><span class="n">x</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">p</span><span class="p">.</span><span class="n">color</span>
|
||||
<a id="__codelineno-1-28" name="__codelineno-1-28" href="#__codelineno-1-28"></a>
|
||||
<a id="__codelineno-1-29" name="__codelineno-1-29" href="#__codelineno-1-29"></a><span class="k">proc </span><span class="nf">mainLoop</span><span class="p">(</span><span class="n">g</span><span class="p">:</span> <span class="n">Game</span><span class="p">,</span> <span class="n">peer</span><span class="p">:</span> <span class="n">Connection</span><span class="p">)</span> <span class="p">{.</span><span class="n">async</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-1-30" name="__codelineno-1-30" href="#__codelineno-1-30"></a> <span class="k">while</span> <span class="ow">not</span> <span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">.</span><span class="n">lost</span> <span class="ow">or</span> <span class="n">g</span><span class="p">.</span><span class="n">remotePlayer</span><span class="p">.</span><span class="n">lost</span><span class="p">):</span>
|
||||
<a id="__codelineno-1-31" name="__codelineno-1-31" href="#__codelineno-1-31"></a> <span class="k">if</span> <span class="n">g</span><span class="p">.</span><span class="n">tickTime</span> <span class="o">></span> <span class="mf">0.0</span><span class="p">:</span>
|
||||
<a id="__codelineno-1-32" name="__codelineno-1-32" href="#__codelineno-1-32"></a> <span class="n">g</span><span class="p">.</span><span class="n">tickTime</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<a id="__codelineno-1-33" name="__codelineno-1-33" href="#__codelineno-1-33"></a> <span class="n">g</span><span class="p">.</span><span class="n">tickFinished</span> <span class="o">=</span> <span class="n">newFuture</span><span class="o">[</span><span class="nb">int</span><span class="o">]</span><span class="p">()</span>
|
||||
<a id="__codelineno-1-29" name="__codelineno-1-29" href="#__codelineno-1-29"></a><span class="k">proc</span><span class="w"> </span><span class="nf">mainLoop</span><span class="p">(</span><span class="n">g</span><span class="p">:</span><span class="w"> </span><span class="n">Game</span><span class="p">,</span><span class="w"> </span><span class="n">peer</span><span class="p">:</span><span class="w"> </span><span class="n">Connection</span><span class="p">)</span><span class="w"> </span><span class="sx">{.async.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-1-30" name="__codelineno-1-30" href="#__codelineno-1-30"></a><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">.</span><span class="n">lost</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">remotePlayer</span><span class="p">.</span><span class="n">lost</span><span class="p">):</span>
|
||||
<a id="__codelineno-1-31" name="__codelineno-1-31" href="#__codelineno-1-31"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">tickTime</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mf">0.0</span><span class="p">:</span>
|
||||
<a id="__codelineno-1-32" name="__codelineno-1-32" href="#__codelineno-1-32"></a><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">tickTime</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span>
|
||||
<a id="__codelineno-1-33" name="__codelineno-1-33" href="#__codelineno-1-33"></a><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">tickFinished</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newFuture</span><span class="o">[</span><span class="nb">int</span><span class="o">]</span><span class="p">()</span>
|
||||
<a id="__codelineno-1-34" name="__codelineno-1-34" href="#__codelineno-1-34"></a>
|
||||
<a id="__codelineno-1-35" name="__codelineno-1-35" href="#__codelineno-1-35"></a> <span class="c"># Wait for a choosen direction</span>
|
||||
<a id="__codelineno-1-36" name="__codelineno-1-36" href="#__codelineno-1-36"></a> <span class="k">let</span> <span class="n">dir</span> <span class="o">=</span> <span class="n">await</span> <span class="n">g</span><span class="p">.</span><span class="n">tickFinished</span>
|
||||
<a id="__codelineno-1-37" name="__codelineno-1-37" href="#__codelineno-1-37"></a> <span class="c"># Send it</span>
|
||||
<a id="__codelineno-1-38" name="__codelineno-1-38" href="#__codelineno-1-38"></a> <span class="n">await</span> <span class="n">peer</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="n">toBytes</span><span class="p">(</span><span class="n">uint32</span><span class="p">(</span><span class="n">dir</span><span class="p">)))</span>
|
||||
<a id="__codelineno-1-35" name="__codelineno-1-35" href="#__codelineno-1-35"></a><span class="w"> </span><span class="c"># Wait for a choosen direction</span>
|
||||
<a id="__codelineno-1-36" name="__codelineno-1-36" href="#__codelineno-1-36"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">dir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">tickFinished</span>
|
||||
<a id="__codelineno-1-37" name="__codelineno-1-37" href="#__codelineno-1-37"></a><span class="w"> </span><span class="c"># Send it</span>
|
||||
<a id="__codelineno-1-38" name="__codelineno-1-38" href="#__codelineno-1-38"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">peer</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="n">toBytes</span><span class="p">(</span><span class="n">uint32</span><span class="p">(</span><span class="n">dir</span><span class="p">)))</span>
|
||||
<a id="__codelineno-1-39" name="__codelineno-1-39" href="#__codelineno-1-39"></a>
|
||||
<a id="__codelineno-1-40" name="__codelineno-1-40" href="#__codelineno-1-40"></a> <span class="c"># Get the one from the peer</span>
|
||||
<a id="__codelineno-1-41" name="__codelineno-1-41" href="#__codelineno-1-41"></a> <span class="n">g</span><span class="p">.</span><span class="n">remotePlayer</span><span class="p">.</span><span class="n">currentDir</span> <span class="o">=</span> <span class="nb">int</span> <span class="n">uint32</span><span class="p">.</span><span class="n">fromBytes</span><span class="p">(</span><span class="n">await</span> <span class="n">peer</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">8</span><span class="p">))</span>
|
||||
<a id="__codelineno-1-42" name="__codelineno-1-42" href="#__codelineno-1-42"></a> <span class="c"># Tick the players & restart</span>
|
||||
<a id="__codelineno-1-43" name="__codelineno-1-43" href="#__codelineno-1-43"></a> <span class="n">g</span><span class="p">.</span><span class="n">tick</span><span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">remotePlayer</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-44" name="__codelineno-1-44" href="#__codelineno-1-44"></a> <span class="n">g</span><span class="p">.</span><span class="n">tick</span><span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-40" name="__codelineno-1-40" href="#__codelineno-1-40"></a><span class="w"> </span><span class="c"># Get the one from the peer</span>
|
||||
<a id="__codelineno-1-41" name="__codelineno-1-41" href="#__codelineno-1-41"></a><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">remotePlayer</span><span class="p">.</span><span class="n">currentDir</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">int</span><span class="w"> </span><span class="n">uint32</span><span class="p">.</span><span class="n">fromBytes</span><span class="p">(</span><span class="n">await</span><span class="w"> </span><span class="n">peer</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">8</span><span class="p">))</span>
|
||||
<a id="__codelineno-1-42" name="__codelineno-1-42" href="#__codelineno-1-42"></a><span class="w"> </span><span class="c"># Tick the players & restart</span>
|
||||
<a id="__codelineno-1-43" name="__codelineno-1-43" href="#__codelineno-1-43"></a><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">tick</span><span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">remotePlayer</span><span class="p">)</span>
|
||||
<a id="__codelineno-1-44" name="__codelineno-1-44" href="#__codelineno-1-44"></a><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">tick</span><span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">)</span>
|
||||
</code></pre></div>
|
||||
We'll draw the map & put some texts when necessary:
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="k">proc </span><span class="nf">draw</span><span class="p">(</span><span class="n">g</span><span class="p">:</span> <span class="n">Game</span><span class="p">)</span> <span class="o">=</span>
|
||||
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a> <span class="k">for</span> <span class="n">pos</span><span class="p">,</span> <span class="n">color</span> <span class="ow">in</span> <span class="n">g</span><span class="p">.</span><span class="n">gameMap</span><span class="p">:</span>
|
||||
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a> <span class="n">setColor</span><span class="p">(</span><span class="n">color</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a> <span class="n">boxFill</span><span class="p">(</span><span class="n">pos</span> <span class="ow">mod</span> <span class="mi">32</span> <span class="o">*</span> <span class="mi">4</span><span class="p">,</span> <span class="n">pos</span> <span class="ow">div</span> <span class="mi">32</span> <span class="o">*</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a> <span class="k">let</span> <span class="n">text</span> <span class="o">=</span> <span class="k">if</span> <span class="ow">not</span><span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">peerFound</span><span class="p">.</span><span class="n">finished</span><span class="p">()):</span> <span class="s">"Matchmaking.."</span>
|
||||
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a> <span class="k">elif</span> <span class="n">g</span><span class="p">.</span><span class="n">tickTime</span> <span class="o"><</span> <span class="o">-</span><span class="mf">1.5</span><span class="p">:</span> <span class="s">"Welcome to Etron"</span>
|
||||
<a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a> <span class="k">elif</span> <span class="n">g</span><span class="p">.</span><span class="n">tickTime</span> <span class="o"><</span> <span class="mf">0.0</span><span class="p">:</span> <span class="s">"- "</span> <span class="o">&</span> <span class="o">$</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">abs</span><span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">tickTime</span><span class="p">)</span> <span class="o">/</span> <span class="mf">0.5</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">&</span> <span class="s">" -"</span>
|
||||
<a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a> <span class="k">elif</span> <span class="n">g</span><span class="p">.</span><span class="n">remotePlayer</span><span class="p">.</span><span class="n">lost</span> <span class="ow">and</span> <span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">.</span><span class="n">lost</span><span class="p">:</span> <span class="s">"DEUCE"</span>
|
||||
<a id="__codelineno-2-9" name="__codelineno-2-9" href="#__codelineno-2-9"></a> <span class="k">elif</span> <span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">.</span><span class="n">lost</span><span class="p">:</span> <span class="s">"YOU LOOSE"</span>
|
||||
<a id="__codelineno-2-10" name="__codelineno-2-10" href="#__codelineno-2-10"></a> <span class="k">elif</span> <span class="n">g</span><span class="p">.</span><span class="n">remotePlayer</span><span class="p">.</span><span class="n">lost</span><span class="p">:</span> <span class="s">"YOU WON"</span>
|
||||
<a id="__codelineno-2-11" name="__codelineno-2-11" href="#__codelineno-2-11"></a> <span class="k">else</span><span class="p">:</span> <span class="s">""</span>
|
||||
<a id="__codelineno-2-12" name="__codelineno-2-12" href="#__codelineno-2-12"></a> <span class="n">printc</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">screenWidth</span> <span class="ow">div</span> <span class="mi">2</span><span class="p">,</span> <span class="n">screenHeight</span> <span class="ow">div</span> <span class="mi">2</span><span class="p">)</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="k">proc</span><span class="w"> </span><span class="nf">draw</span><span class="p">(</span><span class="n">g</span><span class="p">:</span><span class="w"> </span><span class="n">Game</span><span class="p">)</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">pos</span><span class="p">,</span><span class="w"> </span><span class="n">color</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">gameMap</span><span class="p">:</span>
|
||||
<a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a><span class="w"> </span><span class="n">setColor</span><span class="p">(</span><span class="n">color</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="w"> </span><span class="n">boxFill</span><span class="p">(</span><span class="n">pos</span><span class="w"> </span><span class="ow">mod</span><span class="w"> </span><span class="mi">32</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="n">pos</span><span class="w"> </span><span class="ow">div</span><span class="w"> </span><span class="mi">32</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">)</span>
|
||||
<a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ow">not</span><span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">peerFound</span><span class="p">.</span><span class="n">finished</span><span class="p">()):</span><span class="w"> </span><span class="s">"Matchmaking.."</span>
|
||||
<a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a><span class="w"> </span><span class="k">elif</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">tickTime</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="o">-</span><span class="mf">1.5</span><span class="p">:</span><span class="w"> </span><span class="s">"Welcome to Etron"</span>
|
||||
<a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a><span class="w"> </span><span class="k">elif</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">tickTime</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mf">0.0</span><span class="p">:</span><span class="w"> </span><span class="s">"- "</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="o">$</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">abs</span><span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">tickTime</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mf">0.5</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="s">" -"</span>
|
||||
<a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a><span class="w"> </span><span class="k">elif</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">remotePlayer</span><span class="p">.</span><span class="n">lost</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">.</span><span class="n">lost</span><span class="p">:</span><span class="w"> </span><span class="s">"DEUCE"</span>
|
||||
<a id="__codelineno-2-9" name="__codelineno-2-9" href="#__codelineno-2-9"></a><span class="w"> </span><span class="k">elif</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">.</span><span class="n">lost</span><span class="p">:</span><span class="w"> </span><span class="s">"YOU LOOSE"</span>
|
||||
<a id="__codelineno-2-10" name="__codelineno-2-10" href="#__codelineno-2-10"></a><span class="w"> </span><span class="k">elif</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">remotePlayer</span><span class="p">.</span><span class="n">lost</span><span class="p">:</span><span class="w"> </span><span class="s">"YOU WON"</span>
|
||||
<a id="__codelineno-2-11" name="__codelineno-2-11" href="#__codelineno-2-11"></a><span class="w"> </span><span class="k">else</span><span class="p">:</span><span class="w"> </span><span class="s">""</span>
|
||||
<a id="__codelineno-2-12" name="__codelineno-2-12" href="#__codelineno-2-12"></a><span class="w"> </span><span class="n">printc</span><span class="p">(</span><span class="n">text</span><span class="p">,</span><span class="w"> </span><span class="n">screenWidth</span><span class="w"> </span><span class="ow">div</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="n">screenHeight</span><span class="w"> </span><span class="ow">div</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span>
|
||||
</code></pre></div></p>
|
||||
<h2 id="matchmaking">Matchmaking</h2>
|
||||
<p>To find an opponent, we will broadcast our address on a
|
||||
@ -624,117 +636,117 @@ broadcasting his address.</p>
|
||||
<p>If we are looking for a game, we'll send <code>ok</code> to let the
|
||||
peer know that we are available, check that he is also available,
|
||||
and launch the game.
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="k">proc </span><span class="nf">new</span><span class="p">(</span><span class="n">T</span><span class="p">:</span> <span class="n">typedesc</span><span class="o">[</span><span class="n">GameProto</span><span class="o">]</span><span class="p">,</span> <span class="n">g</span><span class="p">:</span> <span class="n">Game</span><span class="p">):</span> <span class="n">T</span> <span class="o">=</span>
|
||||
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a> <span class="k">proc </span><span class="nf">handle</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span> <span class="n">Connection</span><span class="p">,</span> <span class="n">proto</span><span class="p">:</span> <span class="nb">string</span><span class="p">)</span> <span class="p">{.</span><span class="n">async</span><span class="p">,</span> <span class="n">gcsafe</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a> <span class="k">defer</span><span class="p">:</span> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">closeWithEof</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a> <span class="k">if</span> <span class="n">g</span><span class="p">.</span><span class="n">peerFound</span><span class="p">.</span><span class="n">finished</span> <span class="ow">or</span> <span class="n">g</span><span class="p">.</span><span class="n">hasCandidate</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a> <span class="k">return</span>
|
||||
<a id="__codelineno-3-7" name="__codelineno-3-7" href="#__codelineno-3-7"></a> <span class="n">g</span><span class="p">.</span><span class="n">hasCandidate</span> <span class="o">=</span> <span class="kp">true</span>
|
||||
<a id="__codelineno-3-8" name="__codelineno-3-8" href="#__codelineno-3-8"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="s">"ok"</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-9" name="__codelineno-3-9" href="#__codelineno-3-9"></a> <span class="k">if</span> <span class="s">"ok"</span> <span class="o">!=</span> <span class="nb">string</span><span class="p">.</span><span class="n">fromBytes</span><span class="p">(</span><span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">1024</span><span class="p">)):</span>
|
||||
<a id="__codelineno-3-10" name="__codelineno-3-10" href="#__codelineno-3-10"></a> <span class="n">g</span><span class="p">.</span><span class="n">hasCandidate</span> <span class="o">=</span> <span class="kp">false</span>
|
||||
<a id="__codelineno-3-11" name="__codelineno-3-11" href="#__codelineno-3-11"></a> <span class="k">return</span>
|
||||
<a id="__codelineno-3-12" name="__codelineno-3-12" href="#__codelineno-3-12"></a> <span class="n">g</span><span class="p">.</span><span class="n">peerFound</span><span class="p">.</span><span class="n">complete</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-13" name="__codelineno-3-13" href="#__codelineno-3-13"></a> <span class="c"># The handler of a protocol must wait for the stream to</span>
|
||||
<a id="__codelineno-3-14" name="__codelineno-3-14" href="#__codelineno-3-14"></a> <span class="c"># be finished before returning</span>
|
||||
<a id="__codelineno-3-15" name="__codelineno-3-15" href="#__codelineno-3-15"></a> <span class="n">await</span> <span class="n">conn</span><span class="p">.</span><span class="n">join</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-16" name="__codelineno-3-16" href="#__codelineno-3-16"></a> <span class="k">return</span> <span class="n">T</span><span class="p">(</span><span class="n">codecs</span><span class="p">:</span> <span class="o">@[</span><span class="s">"/tron/1.0.0"</span><span class="o">]</span><span class="p">,</span> <span class="n">handler</span><span class="p">:</span> <span class="n">handle</span><span class="p">)</span>
|
||||
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="k">proc</span><span class="w"> </span><span class="nf">new</span><span class="p">(</span><span class="n">T</span><span class="p">:</span><span class="w"> </span><span class="n">typedesc</span><span class="o">[</span><span class="n">GameProto</span><span class="o">]</span><span class="p">,</span><span class="w"> </span><span class="n">g</span><span class="p">:</span><span class="w"> </span><span class="n">Game</span><span class="p">):</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a><span class="w"> </span><span class="k">proc</span><span class="w"> </span><span class="nf">handle</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span><span class="w"> </span><span class="n">Connection</span><span class="p">,</span><span class="w"> </span><span class="n">proto</span><span class="p">:</span><span class="w"> </span><span class="nb">string</span><span class="p">)</span><span class="w"> </span><span class="sx">{.async</span>,<span class="w"> </span><span class="sx">gcsafe.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="w"> </span><span class="k">defer</span><span class="p">:</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">closeWithEof</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">peerFound</span><span class="p">.</span><span class="n">finished</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">hasCandidate</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-5" name="__codelineno-3-5" href="#__codelineno-3-5"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-6" name="__codelineno-3-6" href="#__codelineno-3-6"></a><span class="w"> </span><span class="k">return</span>
|
||||
<a id="__codelineno-3-7" name="__codelineno-3-7" href="#__codelineno-3-7"></a><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">hasCandidate</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kp">true</span>
|
||||
<a id="__codelineno-3-8" name="__codelineno-3-8" href="#__codelineno-3-8"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="s">"ok"</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-9" name="__codelineno-3-9" href="#__codelineno-3-9"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="s">"ok"</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">string</span><span class="p">.</span><span class="n">fromBytes</span><span class="p">(</span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">1024</span><span class="p">)):</span>
|
||||
<a id="__codelineno-3-10" name="__codelineno-3-10" href="#__codelineno-3-10"></a><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">hasCandidate</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kp">false</span>
|
||||
<a id="__codelineno-3-11" name="__codelineno-3-11" href="#__codelineno-3-11"></a><span class="w"> </span><span class="k">return</span>
|
||||
<a id="__codelineno-3-12" name="__codelineno-3-12" href="#__codelineno-3-12"></a><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">peerFound</span><span class="p">.</span><span class="n">complete</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-13" name="__codelineno-3-13" href="#__codelineno-3-13"></a><span class="w"> </span><span class="c"># The handler of a protocol must wait for the stream to</span>
|
||||
<a id="__codelineno-3-14" name="__codelineno-3-14" href="#__codelineno-3-14"></a><span class="w"> </span><span class="c"># be finished before returning</span>
|
||||
<a id="__codelineno-3-15" name="__codelineno-3-15" href="#__codelineno-3-15"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">conn</span><span class="p">.</span><span class="n">join</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-16" name="__codelineno-3-16" href="#__codelineno-3-16"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">T</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">codecs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">@[</span><span class="s">"/tron/1.0.0"</span><span class="o">]</span><span class="p">,</span><span class="w"> </span><span class="n">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">handle</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-17" name="__codelineno-3-17" href="#__codelineno-3-17"></a>
|
||||
<a id="__codelineno-3-18" name="__codelineno-3-18" href="#__codelineno-3-18"></a><span class="k">proc </span><span class="nf">networking</span><span class="p">(</span><span class="n">g</span><span class="p">:</span> <span class="n">Game</span><span class="p">)</span> <span class="p">{.</span><span class="n">async</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-3-19" name="__codelineno-3-19" href="#__codelineno-3-19"></a> <span class="c"># Create our switch, similar to the GossipSub example and</span>
|
||||
<a id="__codelineno-3-20" name="__codelineno-3-20" href="#__codelineno-3-20"></a> <span class="c"># the Discovery examples combined</span>
|
||||
<a id="__codelineno-3-21" name="__codelineno-3-21" href="#__codelineno-3-21"></a> <span class="k">let</span>
|
||||
<a id="__codelineno-3-22" name="__codelineno-3-22" href="#__codelineno-3-22"></a> <span class="n">rdv</span> <span class="o">=</span> <span class="n">RendezVous</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-23" name="__codelineno-3-23" href="#__codelineno-3-23"></a> <span class="n">switch</span> <span class="o">=</span> <span class="n">SwitchBuilder</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-24" name="__codelineno-3-24" href="#__codelineno-3-24"></a> <span class="p">.</span><span class="n">withRng</span><span class="p">(</span><span class="n">newRng</span><span class="p">())</span>
|
||||
<a id="__codelineno-3-25" name="__codelineno-3-25" href="#__codelineno-3-25"></a> <span class="p">.</span><span class="n">withAddresses</span><span class="p">(</span><span class="o">@[</span> <span class="n">MultiAddress</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="s">"/ip4/0.0.0.0/tcp/0"</span><span class="p">).</span><span class="n">tryGet</span><span class="p">()</span> <span class="o">]</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-26" name="__codelineno-3-26" href="#__codelineno-3-26"></a> <span class="p">.</span><span class="n">withTcpTransport</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-27" name="__codelineno-3-27" href="#__codelineno-3-27"></a> <span class="p">.</span><span class="n">withYamux</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-28" name="__codelineno-3-28" href="#__codelineno-3-28"></a> <span class="p">.</span><span class="n">withNoise</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-29" name="__codelineno-3-29" href="#__codelineno-3-29"></a> <span class="p">.</span><span class="n">withRendezVous</span><span class="p">(</span><span class="n">rdv</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-30" name="__codelineno-3-30" href="#__codelineno-3-30"></a> <span class="p">.</span><span class="n">build</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-31" name="__codelineno-3-31" href="#__codelineno-3-31"></a> <span class="n">dm</span> <span class="o">=</span> <span class="n">DiscoveryManager</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-32" name="__codelineno-3-32" href="#__codelineno-3-32"></a> <span class="n">gameProto</span> <span class="o">=</span> <span class="n">GameProto</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">g</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-33" name="__codelineno-3-33" href="#__codelineno-3-33"></a> <span class="n">gossip</span> <span class="o">=</span> <span class="n">GossipSub</span><span class="p">.</span><span class="n">init</span><span class="p">(</span>
|
||||
<a id="__codelineno-3-34" name="__codelineno-3-34" href="#__codelineno-3-34"></a> <span class="n">switch</span> <span class="o">=</span> <span class="n">switch</span><span class="p">,</span>
|
||||
<a id="__codelineno-3-35" name="__codelineno-3-35" href="#__codelineno-3-35"></a> <span class="n">triggerSelf</span> <span class="o">=</span> <span class="kp">false</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-36" name="__codelineno-3-36" href="#__codelineno-3-36"></a> <span class="n">dm</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">RendezVousInterface</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">rdv</span><span class="p">))</span>
|
||||
<a id="__codelineno-3-18" name="__codelineno-3-18" href="#__codelineno-3-18"></a><span class="k">proc</span><span class="w"> </span><span class="nf">networking</span><span class="p">(</span><span class="n">g</span><span class="p">:</span><span class="w"> </span><span class="n">Game</span><span class="p">)</span><span class="w"> </span><span class="sx">{.async.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-3-19" name="__codelineno-3-19" href="#__codelineno-3-19"></a><span class="w"> </span><span class="c"># Create our switch, similar to the GossipSub example and</span>
|
||||
<a id="__codelineno-3-20" name="__codelineno-3-20" href="#__codelineno-3-20"></a><span class="w"> </span><span class="c"># the Discovery examples combined</span>
|
||||
<a id="__codelineno-3-21" name="__codelineno-3-21" href="#__codelineno-3-21"></a><span class="w"> </span><span class="k">let</span>
|
||||
<a id="__codelineno-3-22" name="__codelineno-3-22" href="#__codelineno-3-22"></a><span class="w"> </span><span class="n">rdv</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RendezVous</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-23" name="__codelineno-3-23" href="#__codelineno-3-23"></a><span class="w"> </span><span class="n">switch</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SwitchBuilder</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-24" name="__codelineno-3-24" href="#__codelineno-3-24"></a><span class="w"> </span><span class="p">.</span><span class="n">withRng</span><span class="p">(</span><span class="n">newRng</span><span class="p">())</span>
|
||||
<a id="__codelineno-3-25" name="__codelineno-3-25" href="#__codelineno-3-25"></a><span class="w"> </span><span class="p">.</span><span class="n">withAddresses</span><span class="p">(</span><span class="o">@[</span><span class="w"> </span><span class="n">MultiAddress</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="s">"/ip4/0.0.0.0/tcp/0"</span><span class="p">).</span><span class="n">tryGet</span><span class="p">()</span><span class="w"> </span><span class="o">]</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-26" name="__codelineno-3-26" href="#__codelineno-3-26"></a><span class="w"> </span><span class="p">.</span><span class="n">withTcpTransport</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-27" name="__codelineno-3-27" href="#__codelineno-3-27"></a><span class="w"> </span><span class="p">.</span><span class="n">withYamux</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-28" name="__codelineno-3-28" href="#__codelineno-3-28"></a><span class="w"> </span><span class="p">.</span><span class="n">withNoise</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-29" name="__codelineno-3-29" href="#__codelineno-3-29"></a><span class="w"> </span><span class="p">.</span><span class="n">withRendezVous</span><span class="p">(</span><span class="n">rdv</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-30" name="__codelineno-3-30" href="#__codelineno-3-30"></a><span class="w"> </span><span class="p">.</span><span class="n">build</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-31" name="__codelineno-3-31" href="#__codelineno-3-31"></a><span class="w"> </span><span class="n">dm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">DiscoveryManager</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-32" name="__codelineno-3-32" href="#__codelineno-3-32"></a><span class="w"> </span><span class="n">gameProto</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GameProto</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">g</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-33" name="__codelineno-3-33" href="#__codelineno-3-33"></a><span class="w"> </span><span class="n">gossip</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">GossipSub</span><span class="p">.</span><span class="n">init</span><span class="p">(</span>
|
||||
<a id="__codelineno-3-34" name="__codelineno-3-34" href="#__codelineno-3-34"></a><span class="w"> </span><span class="n">switch</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">switch</span><span class="p">,</span>
|
||||
<a id="__codelineno-3-35" name="__codelineno-3-35" href="#__codelineno-3-35"></a><span class="w"> </span><span class="n">triggerSelf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kp">false</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-36" name="__codelineno-3-36" href="#__codelineno-3-36"></a><span class="w"> </span><span class="n">dm</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="n">RendezVousInterface</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">rdv</span><span class="p">))</span>
|
||||
<a id="__codelineno-3-37" name="__codelineno-3-37" href="#__codelineno-3-37"></a>
|
||||
<a id="__codelineno-3-38" name="__codelineno-3-38" href="#__codelineno-3-38"></a> <span class="n">switch</span><span class="p">.</span><span class="n">mount</span><span class="p">(</span><span class="n">gossip</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-39" name="__codelineno-3-39" href="#__codelineno-3-39"></a> <span class="n">switch</span><span class="p">.</span><span class="n">mount</span><span class="p">(</span><span class="n">gameProto</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-38" name="__codelineno-3-38" href="#__codelineno-3-38"></a><span class="w"> </span><span class="n">switch</span><span class="p">.</span><span class="n">mount</span><span class="p">(</span><span class="n">gossip</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-39" name="__codelineno-3-39" href="#__codelineno-3-39"></a><span class="w"> </span><span class="n">switch</span><span class="p">.</span><span class="n">mount</span><span class="p">(</span><span class="n">gameProto</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-40" name="__codelineno-3-40" href="#__codelineno-3-40"></a>
|
||||
<a id="__codelineno-3-41" name="__codelineno-3-41" href="#__codelineno-3-41"></a> <span class="n">gossip</span><span class="p">.</span><span class="n">subscribe</span><span class="p">(</span>
|
||||
<a id="__codelineno-3-42" name="__codelineno-3-42" href="#__codelineno-3-42"></a> <span class="s">"/tron/matchmaking"</span><span class="p">,</span>
|
||||
<a id="__codelineno-3-43" name="__codelineno-3-43" href="#__codelineno-3-43"></a> <span class="k">proc</span> <span class="p">(</span><span class="n">topic</span><span class="p">:</span> <span class="nb">string</span><span class="p">,</span> <span class="n">data</span><span class="p">:</span> <span class="nb">seq</span><span class="o">[</span><span class="n">byte</span><span class="o">]</span><span class="p">)</span> <span class="p">{.</span><span class="n">async</span><span class="p">.}</span> <span class="o">=</span>
|
||||
<a id="__codelineno-3-44" name="__codelineno-3-44" href="#__codelineno-3-44"></a> <span class="c"># If we are still looking for an opponent,</span>
|
||||
<a id="__codelineno-3-45" name="__codelineno-3-45" href="#__codelineno-3-45"></a> <span class="c"># try to match anyone broadcasting it's address</span>
|
||||
<a id="__codelineno-3-46" name="__codelineno-3-46" href="#__codelineno-3-46"></a> <span class="k">if</span> <span class="n">g</span><span class="p">.</span><span class="n">peerFound</span><span class="p">.</span><span class="n">finished</span> <span class="ow">or</span> <span class="n">g</span><span class="p">.</span><span class="n">hasCandidate</span><span class="p">:</span> <span class="k">return</span>
|
||||
<a id="__codelineno-3-47" name="__codelineno-3-47" href="#__codelineno-3-47"></a> <span class="n">g</span><span class="p">.</span><span class="n">hasCandidate</span> <span class="o">=</span> <span class="kp">true</span>
|
||||
<a id="__codelineno-3-41" name="__codelineno-3-41" href="#__codelineno-3-41"></a><span class="w"> </span><span class="n">gossip</span><span class="p">.</span><span class="n">subscribe</span><span class="p">(</span>
|
||||
<a id="__codelineno-3-42" name="__codelineno-3-42" href="#__codelineno-3-42"></a><span class="w"> </span><span class="s">"/tron/matchmaking"</span><span class="p">,</span>
|
||||
<a id="__codelineno-3-43" name="__codelineno-3-43" href="#__codelineno-3-43"></a><span class="w"> </span><span class="n">proc</span><span class="w"> </span><span class="p">(</span><span class="n">topic</span><span class="p">:</span><span class="w"> </span><span class="nb">string</span><span class="p">,</span><span class="w"> </span><span class="n">data</span><span class="p">:</span><span class="w"> </span><span class="nb">seq</span><span class="o">[</span><span class="n">byte</span><span class="o">]</span><span class="p">)</span><span class="w"> </span><span class="sx">{.async.}</span><span class="w"> </span><span class="o">=</span>
|
||||
<a id="__codelineno-3-44" name="__codelineno-3-44" href="#__codelineno-3-44"></a><span class="w"> </span><span class="c"># If we are still looking for an opponent,</span>
|
||||
<a id="__codelineno-3-45" name="__codelineno-3-45" href="#__codelineno-3-45"></a><span class="w"> </span><span class="c"># try to match anyone broadcasting it's address</span>
|
||||
<a id="__codelineno-3-46" name="__codelineno-3-46" href="#__codelineno-3-46"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">peerFound</span><span class="p">.</span><span class="n">finished</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">hasCandidate</span><span class="p">:</span><span class="w"> </span><span class="k">return</span>
|
||||
<a id="__codelineno-3-47" name="__codelineno-3-47" href="#__codelineno-3-47"></a><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">hasCandidate</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kp">true</span>
|
||||
<a id="__codelineno-3-48" name="__codelineno-3-48" href="#__codelineno-3-48"></a>
|
||||
<a id="__codelineno-3-49" name="__codelineno-3-49" href="#__codelineno-3-49"></a> <span class="k">try</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-50" name="__codelineno-3-50" href="#__codelineno-3-50"></a> <span class="k">let</span>
|
||||
<a id="__codelineno-3-51" name="__codelineno-3-51" href="#__codelineno-3-51"></a> <span class="p">(</span><span class="n">peerId</span><span class="p">,</span> <span class="n">multiAddress</span><span class="p">)</span> <span class="o">=</span> <span class="n">parseFullAddress</span><span class="p">(</span><span class="n">data</span><span class="p">).</span><span class="n">tryGet</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-52" name="__codelineno-3-52" href="#__codelineno-3-52"></a> <span class="n">stream</span> <span class="o">=</span> <span class="n">await</span> <span class="n">switch</span><span class="p">.</span><span class="n">dial</span><span class="p">(</span><span class="n">peerId</span><span class="p">,</span> <span class="o">@[</span><span class="n">multiAddress</span><span class="o">]</span><span class="p">,</span> <span class="n">gameProto</span><span class="p">.</span><span class="n">codec</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-49" name="__codelineno-3-49" href="#__codelineno-3-49"></a><span class="w"> </span><span class="k">try</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-50" name="__codelineno-3-50" href="#__codelineno-3-50"></a><span class="w"> </span><span class="k">let</span>
|
||||
<a id="__codelineno-3-51" name="__codelineno-3-51" href="#__codelineno-3-51"></a><span class="w"> </span><span class="p">(</span><span class="n">peerId</span><span class="p">,</span><span class="w"> </span><span class="n">multiAddress</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">parseFullAddress</span><span class="p">(</span><span class="n">data</span><span class="p">).</span><span class="n">tryGet</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-52" name="__codelineno-3-52" href="#__codelineno-3-52"></a><span class="w"> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">switch</span><span class="p">.</span><span class="n">dial</span><span class="p">(</span><span class="n">peerId</span><span class="p">,</span><span class="w"> </span><span class="o">@[</span><span class="n">multiAddress</span><span class="o">]</span><span class="p">,</span><span class="w"> </span><span class="n">gameProto</span><span class="p">.</span><span class="n">codec</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-53" name="__codelineno-3-53" href="#__codelineno-3-53"></a>
|
||||
<a id="__codelineno-3-54" name="__codelineno-3-54" href="#__codelineno-3-54"></a> <span class="n">await</span> <span class="n">stream</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="s">"ok"</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-55" name="__codelineno-3-55" href="#__codelineno-3-55"></a> <span class="k">if</span> <span class="p">(</span><span class="n">await</span> <span class="n">stream</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">10</span><span class="p">))</span> <span class="o">!=</span> <span class="s">"ok"</span><span class="p">.</span><span class="n">toBytes</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-56" name="__codelineno-3-56" href="#__codelineno-3-56"></a> <span class="n">g</span><span class="p">.</span><span class="n">hasCandidate</span> <span class="o">=</span> <span class="kp">false</span>
|
||||
<a id="__codelineno-3-57" name="__codelineno-3-57" href="#__codelineno-3-57"></a> <span class="k">return</span>
|
||||
<a id="__codelineno-3-58" name="__codelineno-3-58" href="#__codelineno-3-58"></a> <span class="n">g</span><span class="p">.</span><span class="n">peerFound</span><span class="p">.</span><span class="n">complete</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-59" name="__codelineno-3-59" href="#__codelineno-3-59"></a> <span class="c"># We are "player 2"</span>
|
||||
<a id="__codelineno-3-60" name="__codelineno-3-60" href="#__codelineno-3-60"></a> <span class="n">swap</span><span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">,</span> <span class="n">g</span><span class="p">.</span><span class="n">remotePlayer</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-61" name="__codelineno-3-61" href="#__codelineno-3-61"></a> <span class="k">except</span> <span class="n">CatchableError</span> <span class="k">as</span> <span class="n">exc</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-62" name="__codelineno-3-62" href="#__codelineno-3-62"></a> <span class="k">discard</span>
|
||||
<a id="__codelineno-3-63" name="__codelineno-3-63" href="#__codelineno-3-63"></a> <span class="p">)</span>
|
||||
<a id="__codelineno-3-54" name="__codelineno-3-54" href="#__codelineno-3-54"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">stream</span><span class="p">.</span><span class="n">writeLp</span><span class="p">(</span><span class="s">"ok"</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-55" name="__codelineno-3-55" href="#__codelineno-3-55"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">await</span><span class="w"> </span><span class="n">stream</span><span class="p">.</span><span class="n">readLp</span><span class="p">(</span><span class="mi">10</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="s">"ok"</span><span class="p">.</span><span class="n">toBytes</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-56" name="__codelineno-3-56" href="#__codelineno-3-56"></a><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">hasCandidate</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kp">false</span>
|
||||
<a id="__codelineno-3-57" name="__codelineno-3-57" href="#__codelineno-3-57"></a><span class="w"> </span><span class="k">return</span>
|
||||
<a id="__codelineno-3-58" name="__codelineno-3-58" href="#__codelineno-3-58"></a><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">peerFound</span><span class="p">.</span><span class="n">complete</span><span class="p">(</span><span class="n">stream</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-59" name="__codelineno-3-59" href="#__codelineno-3-59"></a><span class="w"> </span><span class="c"># We are "player 2"</span>
|
||||
<a id="__codelineno-3-60" name="__codelineno-3-60" href="#__codelineno-3-60"></a><span class="w"> </span><span class="n">swap</span><span class="p">(</span><span class="n">g</span><span class="p">.</span><span class="n">localPlayer</span><span class="p">,</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">remotePlayer</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-61" name="__codelineno-3-61" href="#__codelineno-3-61"></a><span class="w"> </span><span class="k">except</span><span class="w"> </span><span class="n">CatchableError</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">exc</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-62" name="__codelineno-3-62" href="#__codelineno-3-62"></a><span class="w"> </span><span class="k">discard</span>
|
||||
<a id="__codelineno-3-63" name="__codelineno-3-63" href="#__codelineno-3-63"></a><span class="w"> </span><span class="p">)</span>
|
||||
<a id="__codelineno-3-64" name="__codelineno-3-64" href="#__codelineno-3-64"></a>
|
||||
<a id="__codelineno-3-65" name="__codelineno-3-65" href="#__codelineno-3-65"></a> <span class="n">await</span> <span class="n">switch</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-66" name="__codelineno-3-66" href="#__codelineno-3-66"></a> <span class="k">defer</span><span class="p">:</span> <span class="n">await</span> <span class="n">switch</span><span class="p">.</span><span class="n">stop</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-65" name="__codelineno-3-65" href="#__codelineno-3-65"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">switch</span><span class="p">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-66" name="__codelineno-3-66" href="#__codelineno-3-66"></a><span class="w"> </span><span class="k">defer</span><span class="p">:</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">switch</span><span class="p">.</span><span class="n">stop</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-67" name="__codelineno-3-67" href="#__codelineno-3-67"></a>
|
||||
<a id="__codelineno-3-68" name="__codelineno-3-68" href="#__codelineno-3-68"></a> <span class="c"># As explained in the last tutorial, we need a bootnode to be able</span>
|
||||
<a id="__codelineno-3-69" name="__codelineno-3-69" href="#__codelineno-3-69"></a> <span class="c"># to find peers. We could use any libp2p running rendezvous (or any</span>
|
||||
<a id="__codelineno-3-70" name="__codelineno-3-70" href="#__codelineno-3-70"></a> <span class="c"># node running tron). We will take it's MultiAddress from the command</span>
|
||||
<a id="__codelineno-3-71" name="__codelineno-3-71" href="#__codelineno-3-71"></a> <span class="c"># line parameters</span>
|
||||
<a id="__codelineno-3-72" name="__codelineno-3-72" href="#__codelineno-3-72"></a> <span class="k">if</span> <span class="n">paramCount</span><span class="p">()</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-73" name="__codelineno-3-73" href="#__codelineno-3-73"></a> <span class="k">let</span> <span class="p">(</span><span class="n">peerId</span><span class="p">,</span> <span class="n">multiAddress</span><span class="p">)</span> <span class="o">=</span> <span class="n">paramStr</span><span class="p">(</span><span class="mi">1</span><span class="p">).</span><span class="n">parseFullAddress</span><span class="p">().</span><span class="n">tryGet</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-74" name="__codelineno-3-74" href="#__codelineno-3-74"></a> <span class="n">await</span> <span class="n">switch</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">peerId</span><span class="p">,</span> <span class="o">@[</span><span class="n">multiAddress</span><span class="o">]</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-75" name="__codelineno-3-75" href="#__codelineno-3-75"></a> <span class="k">else</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-76" name="__codelineno-3-76" href="#__codelineno-3-76"></a> <span class="n">echo</span> <span class="s">"No bootnode provided, listening on: "</span><span class="p">,</span> <span class="n">switch</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">fullAddrs</span><span class="p">.</span><span class="n">tryGet</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-68" name="__codelineno-3-68" href="#__codelineno-3-68"></a><span class="w"> </span><span class="c"># As explained in the last tutorial, we need a bootnode to be able</span>
|
||||
<a id="__codelineno-3-69" name="__codelineno-3-69" href="#__codelineno-3-69"></a><span class="w"> </span><span class="c"># to find peers. We could use any libp2p running rendezvous (or any</span>
|
||||
<a id="__codelineno-3-70" name="__codelineno-3-70" href="#__codelineno-3-70"></a><span class="w"> </span><span class="c"># node running tron). We will take it's MultiAddress from the command</span>
|
||||
<a id="__codelineno-3-71" name="__codelineno-3-71" href="#__codelineno-3-71"></a><span class="w"> </span><span class="c"># line parameters</span>
|
||||
<a id="__codelineno-3-72" name="__codelineno-3-72" href="#__codelineno-3-72"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">paramCount</span><span class="p">()</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-73" name="__codelineno-3-73" href="#__codelineno-3-73"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="p">(</span><span class="n">peerId</span><span class="p">,</span><span class="w"> </span><span class="n">multiAddress</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">paramStr</span><span class="p">(</span><span class="mi">1</span><span class="p">).</span><span class="n">parseFullAddress</span><span class="p">().</span><span class="n">tryGet</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-74" name="__codelineno-3-74" href="#__codelineno-3-74"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">switch</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">peerId</span><span class="p">,</span><span class="w"> </span><span class="o">@[</span><span class="n">multiAddress</span><span class="o">]</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-75" name="__codelineno-3-75" href="#__codelineno-3-75"></a><span class="w"> </span><span class="k">else</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-76" name="__codelineno-3-76" href="#__codelineno-3-76"></a><span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="s">"No bootnode provided, listening on: "</span><span class="p">,</span><span class="w"> </span><span class="n">switch</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">fullAddrs</span><span class="p">.</span><span class="n">tryGet</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-77" name="__codelineno-3-77" href="#__codelineno-3-77"></a>
|
||||
<a id="__codelineno-3-78" name="__codelineno-3-78" href="#__codelineno-3-78"></a> <span class="c"># Discover peers from the bootnode, and connect to them</span>
|
||||
<a id="__codelineno-3-79" name="__codelineno-3-79" href="#__codelineno-3-79"></a> <span class="n">dm</span><span class="p">.</span><span class="n">advertise</span><span class="p">(</span><span class="n">RdvNamespace</span><span class="p">(</span><span class="s">"tron"</span><span class="p">))</span>
|
||||
<a id="__codelineno-3-80" name="__codelineno-3-80" href="#__codelineno-3-80"></a> <span class="k">let</span> <span class="n">discoveryQuery</span> <span class="o">=</span> <span class="n">dm</span><span class="p">.</span><span class="n">request</span><span class="p">(</span><span class="n">RdvNamespace</span><span class="p">(</span><span class="s">"tron"</span><span class="p">))</span>
|
||||
<a id="__codelineno-3-81" name="__codelineno-3-81" href="#__codelineno-3-81"></a> <span class="n">discoveryQuery</span><span class="p">.</span><span class="n">forEach</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-82" name="__codelineno-3-82" href="#__codelineno-3-82"></a> <span class="k">try</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-83" name="__codelineno-3-83" href="#__codelineno-3-83"></a> <span class="n">await</span> <span class="n">switch</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">peer</span><span class="o">[</span><span class="n">PeerId</span><span class="o">]</span><span class="p">,</span> <span class="n">peer</span><span class="p">.</span><span class="n">getAll</span><span class="p">(</span><span class="n">MultiAddress</span><span class="p">))</span>
|
||||
<a id="__codelineno-3-84" name="__codelineno-3-84" href="#__codelineno-3-84"></a> <span class="k">except</span> <span class="n">CatchableError</span> <span class="k">as</span> <span class="n">exc</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-85" name="__codelineno-3-85" href="#__codelineno-3-85"></a> <span class="n">echo</span> <span class="s">"Failed to dial a peer: "</span><span class="p">,</span> <span class="n">exc</span><span class="p">.</span><span class="n">msg</span>
|
||||
<a id="__codelineno-3-78" name="__codelineno-3-78" href="#__codelineno-3-78"></a><span class="w"> </span><span class="c"># Discover peers from the bootnode, and connect to them</span>
|
||||
<a id="__codelineno-3-79" name="__codelineno-3-79" href="#__codelineno-3-79"></a><span class="w"> </span><span class="n">dm</span><span class="p">.</span><span class="n">advertise</span><span class="p">(</span><span class="n">RdvNamespace</span><span class="p">(</span><span class="s">"tron"</span><span class="p">))</span>
|
||||
<a id="__codelineno-3-80" name="__codelineno-3-80" href="#__codelineno-3-80"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">discoveryQuery</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dm</span><span class="p">.</span><span class="n">request</span><span class="p">(</span><span class="n">RdvNamespace</span><span class="p">(</span><span class="s">"tron"</span><span class="p">))</span>
|
||||
<a id="__codelineno-3-81" name="__codelineno-3-81" href="#__codelineno-3-81"></a><span class="w"> </span><span class="n">discoveryQuery</span><span class="p">.</span><span class="n">forEach</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-82" name="__codelineno-3-82" href="#__codelineno-3-82"></a><span class="w"> </span><span class="k">try</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-83" name="__codelineno-3-83" href="#__codelineno-3-83"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">switch</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">peer</span><span class="o">[</span><span class="n">PeerId</span><span class="o">]</span><span class="p">,</span><span class="w"> </span><span class="n">peer</span><span class="p">.</span><span class="n">getAll</span><span class="p">(</span><span class="n">MultiAddress</span><span class="p">))</span>
|
||||
<a id="__codelineno-3-84" name="__codelineno-3-84" href="#__codelineno-3-84"></a><span class="w"> </span><span class="k">except</span><span class="w"> </span><span class="n">CatchableError</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">exc</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-85" name="__codelineno-3-85" href="#__codelineno-3-85"></a><span class="w"> </span><span class="n">echo</span><span class="w"> </span><span class="s">"Failed to dial a peer: "</span><span class="p">,</span><span class="w"> </span><span class="n">exc</span><span class="p">.</span><span class="n">msg</span>
|
||||
<a id="__codelineno-3-86" name="__codelineno-3-86" href="#__codelineno-3-86"></a>
|
||||
<a id="__codelineno-3-87" name="__codelineno-3-87" href="#__codelineno-3-87"></a> <span class="c"># We will try to publish our address multiple times, in case</span>
|
||||
<a id="__codelineno-3-88" name="__codelineno-3-88" href="#__codelineno-3-88"></a> <span class="c"># it takes time to establish connections with other GossipSub peers</span>
|
||||
<a id="__codelineno-3-89" name="__codelineno-3-89" href="#__codelineno-3-89"></a> <span class="kd">var</span> <span class="n">published</span> <span class="o">=</span> <span class="kp">false</span>
|
||||
<a id="__codelineno-3-90" name="__codelineno-3-90" href="#__codelineno-3-90"></a> <span class="k">while</span> <span class="ow">not</span> <span class="n">published</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-91" name="__codelineno-3-91" href="#__codelineno-3-91"></a> <span class="n">await</span> <span class="n">sleepAsync</span><span class="p">(</span><span class="mf">500.</span><span class="n">milliseconds</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-92" name="__codelineno-3-92" href="#__codelineno-3-92"></a> <span class="k">for</span> <span class="n">fullAddr</span> <span class="ow">in</span> <span class="n">switch</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">fullAddrs</span><span class="p">.</span><span class="n">tryGet</span><span class="p">():</span>
|
||||
<a id="__codelineno-3-93" name="__codelineno-3-93" href="#__codelineno-3-93"></a> <span class="k">if</span> <span class="p">(</span><span class="n">await</span> <span class="n">gossip</span><span class="p">.</span><span class="n">publish</span><span class="p">(</span><span class="s">"/tron/matchmaking"</span><span class="p">,</span> <span class="n">fullAddr</span><span class="p">.</span><span class="n">bytes</span><span class="p">))</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-94" name="__codelineno-3-94" href="#__codelineno-3-94"></a> <span class="n">published</span> <span class="o">=</span> <span class="kp">false</span>
|
||||
<a id="__codelineno-3-95" name="__codelineno-3-95" href="#__codelineno-3-95"></a> <span class="k">break</span>
|
||||
<a id="__codelineno-3-96" name="__codelineno-3-96" href="#__codelineno-3-96"></a> <span class="n">published</span> <span class="o">=</span> <span class="kp">true</span>
|
||||
<a id="__codelineno-3-87" name="__codelineno-3-87" href="#__codelineno-3-87"></a><span class="w"> </span><span class="c"># We will try to publish our address multiple times, in case</span>
|
||||
<a id="__codelineno-3-88" name="__codelineno-3-88" href="#__codelineno-3-88"></a><span class="w"> </span><span class="c"># it takes time to establish connections with other GossipSub peers</span>
|
||||
<a id="__codelineno-3-89" name="__codelineno-3-89" href="#__codelineno-3-89"></a><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="n">published</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kp">false</span>
|
||||
<a id="__codelineno-3-90" name="__codelineno-3-90" href="#__codelineno-3-90"></a><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">published</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-91" name="__codelineno-3-91" href="#__codelineno-3-91"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">sleepAsync</span><span class="p">(</span><span class="mf">500.</span><span class="n">milliseconds</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-92" name="__codelineno-3-92" href="#__codelineno-3-92"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">fullAddr</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">switch</span><span class="p">.</span><span class="n">peerInfo</span><span class="p">.</span><span class="n">fullAddrs</span><span class="p">.</span><span class="n">tryGet</span><span class="p">():</span>
|
||||
<a id="__codelineno-3-93" name="__codelineno-3-93" href="#__codelineno-3-93"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">await</span><span class="w"> </span><span class="n">gossip</span><span class="p">.</span><span class="n">publish</span><span class="p">(</span><span class="s">"/tron/matchmaking"</span><span class="p">,</span><span class="w"> </span><span class="n">fullAddr</span><span class="p">.</span><span class="n">bytes</span><span class="p">))</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">:</span>
|
||||
<a id="__codelineno-3-94" name="__codelineno-3-94" href="#__codelineno-3-94"></a><span class="w"> </span><span class="n">published</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kp">false</span>
|
||||
<a id="__codelineno-3-95" name="__codelineno-3-95" href="#__codelineno-3-95"></a><span class="w"> </span><span class="k">break</span>
|
||||
<a id="__codelineno-3-96" name="__codelineno-3-96" href="#__codelineno-3-96"></a><span class="w"> </span><span class="n">published</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kp">true</span>
|
||||
<a id="__codelineno-3-97" name="__codelineno-3-97" href="#__codelineno-3-97"></a>
|
||||
<a id="__codelineno-3-98" name="__codelineno-3-98" href="#__codelineno-3-98"></a> <span class="n">discoveryQuery</span><span class="p">.</span><span class="n">stop</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-98" name="__codelineno-3-98" href="#__codelineno-3-98"></a><span class="w"> </span><span class="n">discoveryQuery</span><span class="p">.</span><span class="n">stop</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-99" name="__codelineno-3-99" href="#__codelineno-3-99"></a>
|
||||
<a id="__codelineno-3-100" name="__codelineno-3-100" href="#__codelineno-3-100"></a> <span class="c"># We now wait for someone to connect to us (or for us to connect to someone)</span>
|
||||
<a id="__codelineno-3-101" name="__codelineno-3-101" href="#__codelineno-3-101"></a> <span class="k">let</span> <span class="n">peerConn</span> <span class="o">=</span> <span class="n">await</span> <span class="n">g</span><span class="p">.</span><span class="n">peerFound</span>
|
||||
<a id="__codelineno-3-102" name="__codelineno-3-102" href="#__codelineno-3-102"></a> <span class="k">defer</span><span class="p">:</span> <span class="n">await</span> <span class="n">peerConn</span><span class="p">.</span><span class="n">closeWithEof</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-100" name="__codelineno-3-100" href="#__codelineno-3-100"></a><span class="w"> </span><span class="c"># We now wait for someone to connect to us (or for us to connect to someone)</span>
|
||||
<a id="__codelineno-3-101" name="__codelineno-3-101" href="#__codelineno-3-101"></a><span class="w"> </span><span class="k">let</span><span class="w"> </span><span class="n">peerConn</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">peerFound</span>
|
||||
<a id="__codelineno-3-102" name="__codelineno-3-102" href="#__codelineno-3-102"></a><span class="w"> </span><span class="k">defer</span><span class="p">:</span><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">peerConn</span><span class="p">.</span><span class="n">closeWithEof</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-103" name="__codelineno-3-103" href="#__codelineno-3-103"></a>
|
||||
<a id="__codelineno-3-104" name="__codelineno-3-104" href="#__codelineno-3-104"></a> <span class="n">await</span> <span class="n">g</span><span class="p">.</span><span class="n">mainLoop</span><span class="p">(</span><span class="n">peerConn</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-104" name="__codelineno-3-104" href="#__codelineno-3-104"></a><span class="w"> </span><span class="n">await</span><span class="w"> </span><span class="n">g</span><span class="p">.</span><span class="n">mainLoop</span><span class="p">(</span><span class="n">peerConn</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-105" name="__codelineno-3-105" href="#__codelineno-3-105"></a>
|
||||
<a id="__codelineno-3-106" name="__codelineno-3-106" href="#__codelineno-3-106"></a><span class="k">let</span>
|
||||
<a id="__codelineno-3-107" name="__codelineno-3-107" href="#__codelineno-3-107"></a> <span class="n">game</span> <span class="o">=</span> <span class="n">Game</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-108" name="__codelineno-3-108" href="#__codelineno-3-108"></a> <span class="n">netFut</span> <span class="o">=</span> <span class="n">networking</span><span class="p">(</span><span class="n">game</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-109" name="__codelineno-3-109" href="#__codelineno-3-109"></a><span class="n">nico</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="s">"Status"</span><span class="p">,</span> <span class="s">"Tron"</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-110" name="__codelineno-3-110" href="#__codelineno-3-110"></a><span class="n">nico</span><span class="p">.</span><span class="n">createWindow</span><span class="p">(</span><span class="s">"Tron"</span><span class="p">,</span> <span class="n">mapSize</span> <span class="o">*</span> <span class="mi">4</span><span class="p">,</span> <span class="n">mapSize</span> <span class="o">*</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="kp">false</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-111" name="__codelineno-3-111" href="#__codelineno-3-111"></a><span class="n">nico</span><span class="p">.</span><span class="n">run</span><span class="p">(</span><span class="k">proc </span><span class="err">= </span><span class="nf">discard</span><span class="p">,</span> <span class="k">proc</span><span class="p">(</span><span class="n">dt</span><span class="p">:</span> <span class="nb">float32</span><span class="p">)</span> <span class="o">=</span> <span class="n">game</span><span class="p">.</span><span class="n">update</span><span class="p">(</span><span class="n">dt</span><span class="p">),</span> <span class="k">proc </span><span class="err">= </span><span class="nf">game</span><span class="p">.</span><span class="n">draw</span><span class="p">())</span>
|
||||
<a id="__codelineno-3-107" name="__codelineno-3-107" href="#__codelineno-3-107"></a><span class="w"> </span><span class="n">game</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Game</span><span class="p">.</span><span class="n">new</span><span class="p">()</span>
|
||||
<a id="__codelineno-3-108" name="__codelineno-3-108" href="#__codelineno-3-108"></a><span class="w"> </span><span class="n">netFut</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">networking</span><span class="p">(</span><span class="n">game</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-109" name="__codelineno-3-109" href="#__codelineno-3-109"></a><span class="n">nico</span><span class="p">.</span><span class="n">init</span><span class="p">(</span><span class="s">"Status"</span><span class="p">,</span><span class="w"> </span><span class="s">"Tron"</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-110" name="__codelineno-3-110" href="#__codelineno-3-110"></a><span class="n">nico</span><span class="p">.</span><span class="n">createWindow</span><span class="p">(</span><span class="s">"Tron"</span><span class="p">,</span><span class="w"> </span><span class="n">mapSize</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="n">mapSize</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="kp">false</span><span class="p">)</span>
|
||||
<a id="__codelineno-3-111" name="__codelineno-3-111" href="#__codelineno-3-111"></a><span class="n">nico</span><span class="p">.</span><span class="n">run</span><span class="p">(</span><span class="k">proc</span><span class="w"> </span><span class="err">= </span><span class="nf">discard</span><span class="p">,</span><span class="w"> </span><span class="n">proc</span><span class="p">(</span><span class="n">dt</span><span class="p">:</span><span class="w"> </span><span class="nb">float32</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">game</span><span class="p">.</span><span class="n">update</span><span class="p">(</span><span class="n">dt</span><span class="p">),</span><span class="w"> </span><span class="k">proc</span><span class="w"> </span><span class="err">= </span><span class="nf">game</span><span class="p">.</span><span class="n">draw</span><span class="p">())</span>
|
||||
<a id="__codelineno-3-112" name="__codelineno-3-112" href="#__codelineno-3-112"></a><span class="n">waitFor</span><span class="p">(</span><span class="n">netFut</span><span class="p">.</span><span class="n">cancelAndWait</span><span class="p">())</span>
|
||||
</code></pre></div>
|
||||
And that's it! If you want to run this code locally, the simplest way is to use the
|
||||
@ -755,42 +767,6 @@ first node as a boot node for the second one. But you can also use any rendezvou
|
||||
|
||||
<footer class="md-footer">
|
||||
|
||||
|
||||
<nav class="md-footer__inner md-grid" aria-label="Footer" >
|
||||
|
||||
|
||||
<a href="../tutorial_5_discovery/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Discovery Manager" rel="prev">
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
||||
</div>
|
||||
<div class="md-footer__title">
|
||||
<div class="md-ellipsis">
|
||||
<span class="md-footer__direction">
|
||||
Previous
|
||||
</span>
|
||||
Discovery Manager
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a href="../circuitrelay/" class="md-footer__link md-footer__link--next" aria-label="Next: Circuit Relay" rel="next">
|
||||
<div class="md-footer__title">
|
||||
<div class="md-ellipsis">
|
||||
<span class="md-footer__direction">
|
||||
Next
|
||||
</span>
|
||||
Circuit Relay
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
</nav>
|
||||
|
||||
<div class="md-footer-meta md-typeset">
|
||||
<div class="md-footer-meta__inner md-grid">
|
||||
<div class="md-copyright">
|
||||
@ -812,10 +788,10 @@ first node as a boot node for the second one. But you can also use any rendezvou
|
||||
<div class="md-dialog__inner md-typeset"></div>
|
||||
</div>
|
||||
|
||||
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.instant", "search.highlight"], "search": "../assets/javascripts/workers/search.16e2a7d4.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}}</script>
|
||||
<script id="__config" type="application/json">{"base": "..", "features": ["navigation.instant", "search.highlight"], "search": "../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.8492ddcf.min.js"></script>
|
||||
<script src="../assets/javascripts/bundle.b4d07000.min.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
Loading…
x
Reference in New Issue
Block a user