Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

React Native Support #1837

Closed
MaximoLiberata opened this issue Apr 7, 2024 · 3 comments
Closed

React Native Support #1837

MaximoLiberata opened this issue Apr 7, 2024 · 3 comments

Comments

@MaximoLiberata
Copy link
Contributor

Error: Cannot create URL for blob!

located: src/lib/client.ts
method: _setupPingTimer
class: PingTimer
init: getTimer(variant) = getTimer('auto')

Description:

The error is caused for the library worker-timers when the class PingTimer call getTimer('auto') method. This method getTimer doesn't recognize it's executed in ReactNative (RN), it know it's executed in a browser, but RN implements its own timers as: setTimeOut, setInterval, etc., when is called the method workerTimer instead nativeTimer the library worker-timers that implement Blob to store data or whatever it does, throw the next error: [Error: cannot create URL for blob!], Blob it isn't supported by RN.

Fix:

To support ReactNative (RN) it's necessary install 2 package additionals to RN projects:

Also include the next code at beginning of the program:

process.nextTick = (callback) => { setTimeout(callback, 0) }

Conclusion

I have the commit of the fix of this bug, please @robertsLando allow me create a PR and show you my solution.

I will attach my mqtt client connection and the files I changed in this package to fix the bug:

mqtt_client_example.txt
is-browser.txt
get-timer.txt
shared.txt
BufferedDuplex.txt

@robertsLando
Copy link
Member

Feel free to open the PR, anyway this could be fixed easily by using timerVariant: 'native' in connect options

@MaximoLiberata
Copy link
Contributor Author

I think so, also I made the changes in that way because if isn't imported Buffer library, later I need to put Buffer library in the global scope in RN projects, something like this:

Object.assign(global, { Buffer: require('buffer').Buffer });

This is the PR #1840

@MaximoLiberata
Copy link
Contributor Author

MaximoLiberata commented Apr 13, 2024

This issue was fixed in #1840

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants