package com.codecomb.module.im; import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import android.content.Context; import android.util.Log; import com.codecomb.MyApplication; import com.codecomb.SettingsManager; import com.codecomb.events.AppExitEvent; import com.codecomb.events.ShowBroadcastEvent; import com.codecomb.infrastructure.wabapi.net.Constants; import com.codecomb.utils.JsonUtil; import com.zsoft.SignalA.Hubs.HubConnection; import com.zsoft.SignalA.Hubs.HubInvokeCallback; import com.zsoft.SignalA.Hubs.HubOnDataCallback; import com.zsoft.SignalA.Hubs.IHubProxy; import com.zsoft.SignalA.Transport.StateBase; import com.zsoft.SignalA.Transport.Longpolling.LongPollingTransport; import de.greenrobot.event.EventBus; public class SignalrConnection { protected static final String TAG = SignalrConnection.class.getSimpleName(); private HubConnection connection; private IHubProxy mobileHub; private Context context; public static SignalrConnection getInstance() { return SingletonCreator.instance; } private static class SingletonCreator { private static final SignalrConnection instance = new SignalrConnection(); } private SignalrConnection() { EventBus.getDefault().register(this); context = MyApplication.getInstance().getApplicationContext(); connection = new HubConnection(Constants.SIGNALR_ADDRESS, MyApplication .getInstance().getApplicationContext(), new LongPollingTransport()) { @Override public void OnError(Exception exception) { } @Override public void OnStateChanged(StateBase oldState, StateBase newState) { switch (newState.getState()) { case Connected : Log.e(TAG, "与SignalR服务器连接成功"); register(); break; case Disconnected : Log.e(TAG, "与SignalR服务器断开连接"); break; default : break; } } }; } public void connect() throws Exception { mobileHub = connection.CreateHubProxy("mobileHub"); mobileHub.On("onClarificationsRequested", new HubOnDataCallback() { @Override public void OnReceived(JSONArray args) { Log.e(TAG, "收到问题请求:" + args.toString()); } }); mobileHub.On("onClarificationsResponsed", new HubOnDataCallback() { @Override public void OnReceived(JSONArray args) { Log.e(TAG, "收到问题回复:" + args.toString()); } }); mobileHub.On("onMessageReceived", new HubOnDataCallback() { @Override public void OnReceived(JSONArray args) { // EventBus.getDefault().post(new ShowNewMessageEvent()); Log.e(TAG, "收到消息:" + args.toString()); } }); mobileHub.On("onBroadCast", new HubOnDataCallback() { @Override public void OnReceived(JSONArray args) { Log.e(TAG, "收到广播:" + args.toString()); EventBus.getDefault().post(new ShowBroadcastEvent(JsonUtil.convertToString(args))); } }); connection.Start(); } public void register() { List<String> list = new ArrayList<String>(1); list.add(SettingsManager.getInstance().getAccessToken()); mobileHub.Invoke("RegisterSignalR", list, new HubInvokeCallback() { @Override public void OnResult(boolean succeeded, String response) { if (succeeded) { Log.e(TAG, "注册推送服务成功:" + response); } else { Log.e(TAG, "注册推送服务失败:" + response); } } @Override public void OnError(Exception ex) { ex.printStackTrace(); } }); } public void stopSignalR() { if (connection != null) { connection.Stop(); } } public void onEvent(AppExitEvent event){ stopSignalR(); } }