Comments (3)
In short, the _parse()
function takes a number of bytes that the local peer is waiting to receive from the remote peer, and a callback function to be called once that many bytes have arrived. So, _parseHandshake()
just waits to receive a valid handshake. Whenever a complete message is received, then this._parse(4, this._onmessagelength)
is called, which basically just waits for the next message. It's waiting for 4 bytes since that'll give the length of the message to follow. Then, once that many bytes have come, the appropriate method is called for whatever type of message it might be.
You can read BEP3 to learn about the different message types in the bittorrent protocol.
_write()
is a method that all Node.js writable streams must implement. You can see the docs for Node.js streams here. I also highly recommend the Streams Handbook for learning all about streams. So anyway, _write()
gets called by the streams implementation whenever the remote peer sends data. Data that the remote peer sends us gets buffered (i.e. not actually processed) until the right number of bytes have arrived, determined by the call to this._parse(number, callback)
as mentioned before. Once enough bytes have arrived to process the message, the callback function passed to this._parse()
gets called with the full buffer of data.
from bittorrent-protocol.
I just updated the codebase to include comments about how this all works.
from bittorrent-protocol.
I understood how they work now, although I am still incomprehensible in the code. But It is no matter, I copy the some code to my project. :)
Thank you very much!
from bittorrent-protocol.
Related Issues (20)
- Notification when wire closes. HOT 1
- Error: Package subpath './index.js' is not defined by "exports"
- Getting odd error. HOT 2
- How the contract works? HOT 2
- please remove
- Action required: Greenkeeper could not be activated 🚨
- An in-range update of readable-stream is breaking the build 🚨 HOT 1
- An in-range update of standard is breaking the build 🚨 HOT 1
- Reset unchoked/interested state on 'end' HOT 2
- An in-range update of tape is breaking the build 🚨 HOT 1
- An in-range update of readable-stream is breaking the build 🚨 HOT 2
- An in-range update of standard is breaking the build 🚨 HOT 1
- npm install fails HOT 5
- TypeError: Cannot read property 'unref' of undefined HOT 3
- Switch from Tape to Jest HOT 1
- Dependency Dashboard
- use `buffer-xor/inplace.js` instead of default `buffer-xor` HOT 2
- Emit the wire's peerId on close HOT 5
- Handshake/extended API issue HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from bittorrent-protocol.