vdotok_connect

Getting Started

IOS:

Add the following entry to your Info.plist file, located in < project root >/ios/Runner/Info.plist:

<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) Camera Usage!</string>
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) Microphone Usage!</string>

Android:

Ensure the following permission is present in your Android Manifest file


<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />


Create Client Instance:

First we need to create an instance of emitter client.

Emitter emitter = Emitter.instance;

Add listeners:

Below described main helpful callbacks and listeners:


emitter.onConnect = (bool response)
{

// called when you are connected to emitter

};

emitter.onPresence = (String response)
{

// called when you get the presence of a User

};

emitter.onsubscribe = (String value)
{

// called when the User subscribes to a group

};

emitter.onMessage = (String mesg) async
{

// called whenever any pub/sub occurs

};

emitter.internetConnectivityCallBack = (String mesg)
{

// called whenever your device is connected to internet or disconnected from internet

};

Models:

Below are the Models:

// Use this Model for login/sign up

class User {

  final String auth_token;
  final String authorization_token;
  final String email;
  final String full_name;
  final String message;
  final int process_time;
  final String ref_id;
  final int status;
  final int user_id;

}

// Use this Model for Groups

class GroupModel {

  dynamic admin_id;
  dynamic auto_created;
  dynamic channel_key;
  dynamic channel_name;
  dynamic group_title;
  dynamic id;
  dynamic created_datetime;

}

// Use this Model for Getting All Users

class Contact {

  int user_id;
  dynamic email;
  String ref_id;
  String full_name;

}

// Use this Model for Chat

class ChatModel {

  var id;
  var to;
  var key;
  var from;
  var type;
  var content;
  var date;
  int status;
  var size;
  var isGroupMessage;
  var subtype;

}


Constants:

Class used in Receipt Type to inform Status of the Message:


class ReceiptType {

static var sent = 1;
static var delivered = 2;
static var seen = 3;

}

Class to Identify the Type of File:


class MediaType {

static int image = 0;
static int audio = 1;
static int video = 2;
static int file = 3;

}


Class to Identify Notification Type:


class NotificationType {

static const String newGroup = "new";
static const String deleteGroup = "delete";
static const String modifyGroup = "modify";

}


Class to Identify the Type of Message:


class MessageType {

static const String text = "text";
static const String media = "media";
static const String file = "file";
static const String thumbnail = "thumbnail";
static const String path = "path";
static const String typing = "typing";
static const String ftp = "ftp";
static const String acknowledge = "acknowledge";
static const String receipts = "receipts";

}

SDK Methods:

Use this method to connect socket.


emitter.connect(

String clientId, // in login/sign up response
bool reconnectivity, // true
String refId, // in login/sign up response
String authorizationToken, // in login/sign up response
String projectId,
String host, // in login/sign up response
String port // in login/sign up response

);

Subscription:

Use this method to subscribe to a chat or group.


emitter.subscribe(String channelKey,String channelName);

SubscribePresence:

Use this method to acknowledge the availability of the user.


emitter.subscribePresence(String channelKey, String channelName, bool changes, bool status)

Publish:

Use this method to publish message of object type which can be of any type i-e text, audio, video, document, or image type.


Packet for Publishing Messages

var sendMessage = {

"from": // your refId
"content": // text/file/image/video/,mp3
"id": // random Id,
"key": // group channel_key,
"subType": // use this in case of media sharing file,image,video,audio i.e. MediaType.image
"fileExtension": // use this in case of media sharing i.e. .mp3, .doc, .mp4
"type": // MessageType enum value mentioned above i.e. MessageType.text
"to": // channel_name
"isGroupMessage": false,
"date": // current date
"status": // ReceiptType enum value mentioned above i.e. ReceiptType.sent
"size": 0.0

};

emitter.publish(String channelKey, String channelName, Map < String, dynamic > sendMessage, int ttl);

Publish Notification:

Use this method to publish notification of group creation, deletion and modification.


Packet for Publishing Notification

var tempdata =

{

"from": // your own refId,
"data": {
        "action": "new", //new, modify, delete
        "groupModel": // use GroupModel here mentioned above
        },
"to": // group's participants refId list

};

emitter.publishNotification(Map < String, dynamic > tempdata);

Listener for Internet Connection/Disconnection

Use this method to listen changes every time the User’s device is connected to internet or disconnected from internet.


signalingClient.checkConnectivity();

Internet Status

Use this method to check whether or not the User’s device is connected to internet. It will return true or false value.


signalingClient.getInternetStatus(); 

Example:


Emitter emitter = Emitter.instance;
bool isSocketConnect = false;


 @override
  void initState()
{
    super.initState();

emitter.connect(

        clientId: getUser!.user_id.toString(),
        reconnectivity: true,
        refId: getUser!.ref_id,
        authorizationToken: getUser!.authorization_token,
        projectId: project_id,
        host: authProvider.host,
        port: authProvider.port

);
emitter.onConnect = (bool response) {

if (response) {
 setState((){
         isSocketConnect = true;
    });
}
else {
 setState((){
        isSocketConnect = true;
    });
}

};

subscribeChannel(groupModel.channel_key, groupModel.channel_name){
 emitter.subscribe(channel_key,channel_name);
}

emitter.onSubscribe = (value) {
  
if (value == groups!.last!.channel_key + "/" + groups!.last!.channel_name) 
{
       changeState();
}
};

subscribePresence(groupModel.channel_key, groupModel.channel_name, changes, status){
 emitter.subscribePresence(channel_key, channel_name, changes, status);
}

emitter.onPresence = (String response) {

handlePresence(json.decode(response));
    
};

var tempData = {

    "id": generateMd5(groupModel.channel_key),
    "to":groupModel.channel_name,
    "key": groupModel.channel_key,
    "from": getUser!.ref_id,
    "type": MessageType.ftp || MediaType.text
    "content": textController.text,
    "size": 0.0,
    "isGroupMessage": false,
    "date": ((DateTime.now()).millisecondsSinceEpoch).round(),
    "status": ReceiptType.sent,
    "subType": MediaType.image,
    "fileExtension": .jpg

};
                       
emitter.publish( groupModel.channel_key,  groupModel.channel_name, tempData, 0);

emitter.onMessage = (msg) async {

 var message = json.decode(msg); // use this variable for future
      
 };

}

Libraries

vdotok_connect