In fact, your question 1 is resolved by the context of your question 2. ^^
As you are making a plugin, there will soon be a parsing system if you distribute it (post it on this forum for the community) once it is done.
Events can take parameters. Check out other plugins' edittime.js at the "section" Conditions. Each condition, before the AddCondition() function has several lines to add parameters (check text plugin for example, or mouse).
The "multiple messages reception" part could be resolved by a reception pool.
Theory would be (I can't download the plugin now, the link seems dead/off):
Add an array to your project
Add a global variable "step"
Socket=>"on reception" (something like that, I can't have the plugin under my eyes)
..array. Set at X (where X is global step), value Socket.LastDataReceived
..array. Set size to X=step+1 ,Y=0,Z=0
..step. Add 1 to step
Then you wouldn't get the datas to parse from Socket.LastDataReceived but from your array (array.get(x)).
Once parsing is done, you'd remove the data from the array and substract 1 to step.
Again, that's the theory.