Code Monkey home page Code Monkey logo

titanium-socketio's Introduction

Socket.io client for Titanium

Socket.IO module for Titanium using native Android and iOS clients.

Requirements

  • Android: Titanium SDK 7.0.0+
  • iOS: Titanium SDK 7.4.0+ / Xcode 10.2 / Swift 5.0+

๐Ÿ’ก The iOS module is built with Swift 5.0 and you need to have the same Swift version installed to be able to use this module. You can check your current Swift version by using swift -v from the terminal.

Getting started

Install the module to your project or globally by copying it into the modules folder. After that enable it in your tiapp.xml.

<modules>
  <module platform="android">ti.socketio</module>
  <module platform="iphone">ti.socketio</module>
</modules>

Usage

This module aims to be as compatible with the web client as possible. Please refer to the Client API for a full API documentation of all supported methods.

const io = require('ti.socketio');
const socket = io.connect('http://localhost:8080');
socket.on('connect', function() {
  Ti.API.debug('socket connected');

  socket.emit('hello', 'world');
});

Currently supported methods and properties are:

IO

  • io(url[, options]) (exposed as connect, note that url is not optional)
  • socket.id
  • socket.connected
  • socket.disconnected
  • socket.io
  • socket.open()
  • socket.connect()
  • socket.emit(eventName[, ...args][, ack])
  • socket.on(eventName, callback) (Note: Using acknowledgement callbacks not supported yet)
  • socket.off([eventName], [fn])
  • socket.close()
  • socket.disconnect()

Manager

  • Manager(url[, options]) (note that url is not optional)
  • manager.socket(nsp) (options are not supportedl)
  • manager.open() (callback is not supported)
  • manager.connect()
  • manager.close() (noop on Android, all sockets need to be closed individually)
  • manager.dsconnect()

You can pass the option keys from both JS and native when creating a new socket. But only options that are actually supported on the native side will be converted to the matching configuration option. For example the JS query option will be converted to the connectionParams option in the native iOS framework.

Limitations

Due to different architecture of the native frameworks and the web client there are a few things you need to be aware of when using this module.

Events on iOS

The native clients don't have the concept of auto connect (which is the default for the web client). We emulate this by automatically connecting the socket for you if you don't explicitly specify autoConnect: false in the options.

However, this impacts emitting events on iOS where you need to explicity wait for a socket to be connected before you can start emitting events.

import io from 'ti.socketio';

const socket = io.connect('http://localhost');
socket.on('connect', () => {
  socket.emit('myevent');
});

This is due to a limitation in the iOS native client which discards any events before a socket is connected. The Android client will store events in a buffer and send them automatically once connected.

Missing events

  • reconnect (use connect instead)
  • reconnect_error (use error instead)
  • reconnect_failed (use error instead)

Other event notes

  • connect_error is the same as error. You need to check the error message to see what kind of error happened.
  • reconnect_attempt does not report the number of reconnect attempts.
  • pong does not report the number ms elapsed since ping.

Useful links

Based on the socket.io-client-java on Android and socket.io-client.swift on iOS.

Contributions

Open source contributions are greatly appreciated! If you have a bugfix, improvement or new feature, please create an issue first and submit a pull request against master.

Getting Help

If you have questions about the Socket.IO module for Titanium, feel free to reach out on Stackoverflow or the #helpme channel on TiSlack. In case you find a bug, create a new issue or open a new JIRA ticket.

License

Apache License, Version 2.0

titanium-socketio's People

Contributors

janvennemann avatar hansemannn avatar sgtcoolguy avatar dependabot[bot] avatar lukic avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.