Discourse is not powered by WordPress—it lives outside of WordPress. That means s2Member cannot protect Discourse pages unless you somehow load your WordPress installation on each Discourse page-load, which probably isn’t even possible given that Discourse is written in Ruby (as opposed to PHP, which is what powers WordPress).
For more info on this topic, see Protecting Non-WordPress Content.
On this same topic, I thought I should mention the related GitHub issue that was opened awhile ago, but has since been closed due to lack of any practical solution to the problem of integrating Discourse and s2Member: https://github.com/websharks/s2member/issues/698