├── .gitignore ├── README.md ├── SCAndroidDemo.iml ├── app ├── .gitignore ├── app.iml ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── socketcluster │ │ └── io │ │ └── androiddemo │ │ └── MainActivity.java │ └── res │ ├── layout │ └── activity_main.xml │ ├── menu │ └── menu_main.xml │ ├── mipmap-hdpi │ └── ic_launcher.png │ ├── mipmap-mdpi │ └── ic_launcher.png │ ├── mipmap-xhdpi │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ └── ic_launcher.png │ ├── values-w820dp │ └── dimens.xml │ └── values │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── socketclusterandroidclient ├── .gitignore ├── build.gradle ├── libs └── json-simple-1.1.1.jar ├── proguard-rules.pro ├── socketclusterandroidclient.iml └── src └── main ├── AndroidManifest.xml ├── assets ├── socketcluster_bridge.js └── webviewjavascriptbridge.js ├── java ├── com │ └── fangjian │ │ └── WebViewJavascriptBridge.java └── socketcluster │ └── io │ └── socketclusterandroidclient │ ├── ISocketCluster.java │ ├── SocketCluster.java │ └── SocketClusterJSInterface.java └── res ├── raw ├── user_client.html └── webviewjavascriptbridge.js └── values └── strings.xml /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | /local.properties 3 | /.idea/workspace.xml 4 | /.idea/libraries 5 | .DS_Store 6 | /build 7 | /captures 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # socketcluster-client-android 2 | Native Android client for SocketCluster 3 | 4 | ### Note that this client is no longer being developed. Some members of the SC community may have started work on building a native Android client. See https://github.com/SocketCluster/socketcluster/issues/208 for details. 5 | 6 | This project is working in progress, please read ``MainActivity.java`` for existing usages, 7 | feedbacks are welcome. 8 | -------------------------------------------------------------------------------- /SCAndroidDemo.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/app.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | buildscript { 4 | repositories { 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:1.2.3' 9 | } 10 | } 11 | 12 | 13 | allprojects { 14 | repositories { 15 | jcenter() 16 | } 17 | } 18 | 19 | 20 | dependencies { 21 | compile fileTree(include: ['*.jar'], dir: 'libs') 22 | compile 'com.android.support:appcompat-v7:22.1.1' 23 | compile project(':socketclusterandroidclient') 24 | } 25 | 26 | android { 27 | compileSdkVersion 21 28 | buildToolsVersion "22.0.1" 29 | defaultConfig { 30 | applicationId "socketcluster.io.androiddemo" 31 | minSdkVersion 19 32 | targetSdkVersion 21 33 | versionCode 1 34 | versionName "1.0" 35 | } 36 | buildTypes { 37 | release { 38 | minifyEnabled false 39 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 40 | } 41 | } 42 | productFlavors { 43 | } 44 | compileOptions { 45 | } 46 | } 47 | 48 | 49 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/lihanli/android-sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 11 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/java/socketcluster/io/androiddemo/MainActivity.java: -------------------------------------------------------------------------------- 1 | package socketcluster.io.androiddemo; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.app.AppCompatActivity; 5 | import android.util.Log; 6 | import android.view.Menu; 7 | import android.view.MenuItem; 8 | import android.view.View; 9 | import android.widget.Button; 10 | 11 | import socketcluster.io.socketclusterandroidclient.ISocketCluster; 12 | import socketcluster.io.socketclusterandroidclient.SocketCluster; 13 | 14 | 15 | public class MainActivity extends AppCompatActivity implements ISocketCluster { 16 | 17 | private SocketCluster sc; 18 | private static String TAG = "SCDemo"; 19 | @Override 20 | protected void onCreate(Bundle savedInstanceState) { 21 | super.onCreate(savedInstanceState); 22 | setContentView(R.layout.activity_main); 23 | 24 | sc = new SocketCluster("192.168.199.103", "8000", false, this); 25 | sc.setDelegate(this); 26 | // Connect button 27 | final Button connectBtn = (Button) findViewById(R.id.btnConnect); 28 | connectBtn.setOnClickListener(new View.OnClickListener() { 29 | @Override 30 | public void onClick(View view) { 31 | sc.connect(); 32 | } 33 | }); 34 | // Disconnect button 35 | final Button disconnectBtn = (Button) findViewById(R.id.btnDisconnect); 36 | disconnectBtn.setOnClickListener(new View.OnClickListener() { 37 | @Override 38 | public void onClick(View view) { 39 | sc.disconnect(); 40 | } 41 | }); 42 | // Listen to Rand event button handler 43 | final Button listenToRandBtn = (Button) findViewById(R.id.btnListenRand); 44 | listenToRandBtn.setOnClickListener(new View.OnClickListener() { 45 | @Override 46 | public void onClick(View view) { 47 | sc.registerEvent("rand"); 48 | } 49 | }); 50 | 51 | final Button subToWeatherBtn = (Button) findViewById(R.id.btnSubWeather); 52 | subToWeatherBtn.setOnClickListener(new View.OnClickListener(){ 53 | @Override 54 | public void onClick(View view) { 55 | sc.subscribeToChannel("WEATHER"); 56 | } 57 | }); 58 | final Button unSubToWeatherBtn = (Button) findViewById(R.id.btnUnSubWeather); 59 | unSubToWeatherBtn.setOnClickListener(new View.OnClickListener(){ 60 | @Override 61 | public void onClick(View view) { 62 | sc.unsubscribeFromChannel("WEATHER"); 63 | } 64 | }); 65 | 66 | final Button pubToWeatherBtn = (Button) findViewById(R.id.btnPubWeather); 67 | pubToWeatherBtn.setOnClickListener(new View.OnClickListener(){ 68 | @Override 69 | public void onClick(View view) { 70 | sc.publishToChannel("WEATHER", "CLOUDY"); 71 | } 72 | }); 73 | 74 | 75 | } 76 | @Override 77 | public boolean onCreateOptionsMenu(Menu menu) { 78 | // Inflate the menu; this adds items to the action bar if it is present. 79 | getMenuInflater().inflate(R.menu.menu_main, menu); 80 | return true; 81 | } 82 | 83 | @Override 84 | public boolean onOptionsItemSelected(MenuItem item) { 85 | // Handle action bar item clicks here. The action bar will 86 | // automatically handle clicks on the Home/Up button, so long 87 | // as you specify a parent activity in AndroidManifest.xml. 88 | int id = item.getItemId(); 89 | 90 | //noinspection SimplifiableIfStatement 91 | if (id == R.id.action_settings) { 92 | return true; 93 | } 94 | 95 | return super.onOptionsItemSelected(item); 96 | } 97 | 98 | @Override 99 | public void socketClusterReceivedEvent(String name, String data) { 100 | Log.i(TAG, "ReceivedEvent " + name); 101 | Log.i(TAG, "ReceivedEvent " + data); 102 | } 103 | 104 | @Override 105 | public void socketClusterChannelReceivedEvent(String name, String data) { 106 | Log.i(TAG, "socketClusterChannelReceivedEvent " + name + " data: " + data); 107 | } 108 | @Override 109 | public void socketClusterDidConnect() { 110 | Log.i(TAG, "SocketClusterDidConnect"); 111 | } 112 | @Override 113 | public void socketClusterDidDisconnect() { 114 | Log.i(TAG, "socketClusterDidDisconnect"); 115 | } 116 | @Override 117 | public void socketClusterOnError(String error) { 118 | Log.i(TAG, "socketClusterOnError"); 119 | } 120 | @Override 121 | public void socketClusterOnKickOut() { 122 | Log.i(TAG, "socketClusterOnKickOut"); 123 | } 124 | @Override 125 | public void socketClusterOnSubscribe() { 126 | Log.i(TAG, "socketClusterOnSubscribe"); 127 | } 128 | @Override 129 | public void socketClusterOnSubscribeFail() { 130 | Log.i(TAG, "socketClusterOnSubscribeFail"); 131 | } 132 | @Override 133 | public void socketClusterOnUnsubscribe() { 134 | Log.i(TAG, "socketClusterOnUnsubscribe"); 135 | } 136 | } 137 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 17 | 18 | 28 | 29 | 37 | 38 | 47 | 48 | 56 | 57 | 65 | 66 | 74 | 75 |