Open mavericksthinker opened 6 years ago
What storage adapter you use, is separate from the underlying sync protocol. Whether you use radisk or localStorage, should make no difference for syncing data between clients. What I don't see in your code, is how you specify a connection to the nodejs server, that allows your clients to sync. You would need to add:
var gun = Gun({
file:"*",
web: config.server,
radisk: false,
localStorage:true,
peers: ['http://myPublicServerIPorUrl:port/gun'] //add this line
});
`<ul></ul>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/gun/gun.js"></script>
<script>
var gun = Gun('http://***.***.***.***:9876/gun).get('thoughts');
$('form').on('submit', function(event){
event.preventDefault();
gun.set($('input').val());
$('input').val("");
});
gun.map().on(function(thought, id){
var li = $('#' + id).get(0) || $('<li>').attr('id', id).appendTo('ul');
if(thought){
$(li).text(thought);
} else {
$(li).hide();
}
});
$('body').on('dblclick', 'li', function(event){
gun.get(this.id).put(null);
});
</script>
</body>
Please have a look I provide it here , which worked perfectly well for a n number of clients communicating with a single server which stores the data and does the sync seemlessly .But when it comes to each client has its own server which communicates among themselves as shown in the video , it causes problem. Also I just tried your way and the clients still dont sync. Hope I can get a way to make this thing work via gun
I think I understand now. You are trying to run a 'node.js' peer on the client. So other clients can connect to your client and download his data.
Now your second code runs as the app, but you said you had to save data in localStorage, because your OS doesn't allow you to write to disk from the 'Cordova Browser' you are running above code in, correct?
The node.js peer and the cordova app live in separate boxes, that don't sync data on your device. If your node code writes something using gun.get('something').put({name:'test'}), does the other client receive it?
If so, your problem is that your cordova app, needs to also connect to the node.js peer that is running locally on the phone, which then will initiate sync between what is in cordova and what is in node on your device, once that happens, the other client device will receive the syncs via the node.js.
Does that make sense?
Bull's-eye , that's what my aim is and you can see the require Cordova bridge in my nodejs code . That's what connects the client app(Cordova app ) to the nodejs app running in background to communicate. Yes I have tried that and it does put the data . But communication with another client with its own nodejs running in its background doesn't occur.That's what making me confused. And about write access my OS is allowing as that's what I am doing for my previous project . But this time it is unable to find the place where it will store the data coz I think it will store on the Android device as the server is running in the background of the app as its data but when I am creating the folder or even the file it shows me the directory not found error and it crashes
Hmm, one quirk that could be a cause, to establish the connection you also have to call gun.get('something').once((data)=>{return data;}), which opens the connection.
But what you are describing, sounds like the node.js peer has no access to the android filesystem? Do the fs calls not work?
According to your error Error: EROFS: read-only file system, mkdir '*'
you have no write access for the node.js peer
It does as in my previous project as I mentioned , it is able to store the data. But in this when I specify the name of the directory or the data.json it is show not such directory found eventhough I made the directory myself and if i mention data.json ( which gets created automatically when i run the server on my laptop) it stills shows no such directories found. The one you suggested I will try that and will be updating.
I hope it works. I am shooting a bit in the dark with cordova.
Sadly that dint work . But just wanted to ask , do we have to implement dgram to sync between multiple peers in local network or is there any way to do that via gun?
oh no :(
@mavericksthinker I'm not smart enough to know so random guess: Would the browser WebRTC adapter help at all? I know internally WebRTC uses some UDP stuff, and I disabled WebRTC from using ordered/retried packets. I doubt it, but just a shot/chance.
Thank you for the idea will give it a try.
Hello , I am currently working on a project where I have to build a cordova app that has a node server running on it. I was able to do that with the help of nodejs for codova , I want to achieve this for cordova android app. Then the other aim is to sync the data on multiple clients which have a node server running in background. As I was using Gun database for the webserver to sync the data over multiple platform and also on cordova Android app(just client without any nodejs server), it worked perfectly fine (just with one issue I faced is that on my htc phone running the android app or on browser, the sync was very slow took like 1 to 2mins everytime, but other clients sync data instantaneously. kinda curious why is that happening ). Coming back to the main issue when I run the same with nodejs running in the background of the client app , I faced two problems Let me provide the server code
1.The var gun = Gun({ file:"./gun/server1", web: config.server }); is providing the following error after I get this message on my android console
I/NODEJS-MOBILE: Hello wonderful person! :) Thanks for using GUN, feel free to ask for help on https://gitter.im/amark/gun and ask StackOverflow questions tagged with 'gun'!
As we can realize from the error its the directory location. I tried to create the directory in my server directory of the cordova android app, but it shows the same error. so I tried to do this (storing the data in local storage) var gun = Gun({ file:"*", web: config.server, radisk: false, localStorage:true }); This worked and the application worked but the problem is I was unable to sync the data between two clients as it is storing in their local storage. I need this app to sync like INTENDED APPLICATION(its for ios but I want to do that and android. Any help will be greatly appreciated.