How to get started with Richard Schneider's C# implementation

I’m thinking of creating an App that will run on Android, iOS and Windows and have the following functionality:

  • An interface like GuitarTapp Pro for searching, selecting and storing Musical Tabs with lyrics and chords.
  • Create setlists for performers
  • Etc…
  • I would like to make it a p2p serverless application with IPFS.

I’m going to use Xamarin with .Net Core as the technology to create the cross platform apps.

I’ve already found the Ipfs.Api assembly by Richard Scheider but am a bit lost on how to get started. I would like the App to be a Node as well as a Client.

Questions:

  • I am familiar with the concept of IPFS but don’t understand how peers can connect to each other and exchange data.
  • Can I create a Node with Richard’s implementation?
  • Does it work on LAN with NAT to connect to other nodes on the Internet?
  • I would also need some kind of versioning system. Because 2 or more users could edit the same tab the difference should be merged somehow or else I get the ‘last one wins’ situation which is undesirable.

Who can help me get started?

Well, break it down into bits. I can’t help with any of the other parts, but for the IPFS part, try to write code that publishes a file some file, any file, and make sure that you can read it, write it share it.

Yes, IPFS works behind a NAT (at least for my desktop…)

Re: versioning: IPFS does not do that, but perhaps, instead of using IPFS, take a look at SSB (secure scuttlebutt) – one of it’s great features is that it works off-line, when you have no network connection. I mean, its still usable when offline, and then auto-syncs back up when online. They’ve already built a social-media app on top of it; maybe you can take that app, remove all the social-media stuff, and add stuff fro guitar tabs.

(They’ve actually built 3-4 different social media apps on it, different languages, works on iphone etc but are all compatible with one-another. No clue if any of them, are C#)

Hi Linas, thanks for the reply. SSB looks JavaScript after a quick peek. Really want this completely in C# as that is my expertise so I’ll have to write CRUD for IPFS myself but that will be fun. I’ve already contacted Richard and he’s willing to help me on my way. Good to hear it works on a LAN with NAT as that would be blocking for using IPFS. I’m enthusiastic about the possibilities.

I’ve started an issue on GitHub here: https://github.com/richardschneider/net-ipfs-engine/issues/149

Well, there’s a javascript implementation of SSB, but there’s also a Rust implementation (I think its Rust, I get these languages confused) and there’s also an implementation in whatever language that Apple likes to use. Yes, its possible that there aren’t any pure C# implementations. I guess FFI will result in too much hair-pulling?