public void AddMessageListener <T>(string selector, MessageReceived <T> callback) { IRTCallback rtCallback = new RTCallback <T>((Delegate)callback, result => { try { IAdaptingType message; if (!typeof(T).Equals(typeof(Message))) { message = WeborbSerializationHelper.AsAdaptingType(result, "message"); } else { message = result; } T adaptedResponse = (T)message.adapt(typeof(T)); callback(adaptedResponse); } catch (System.Exception ex) { ErrorHandler?.Invoke(RTErrorType.MESSAGELISTENER, new Exception.BackendlessFault(ex)); } }, fault => { ErrorHandler?.Invoke(RTErrorType.MESSAGELISTENER, fault); }); AddMessageListener(selector, rtCallback); }
public void AddUserStatusListener(UserStatusChanged callback) { if (callback == null) { throw new ArgumentNullException("callback", "the callback argument cannot be null"); } IRTCallback rtCallback = new RTCallback <UserStatusResponse>((Delegate)callback, result => { try { UserStatusResponse userStatusResponse = (UserStatusResponse)result.adapt(typeof(UserStatusResponse)); callback?.Invoke(userStatusResponse); } catch (System.Exception ex) { ErrorHandler?.Invoke(RTErrorType.USERSTATUSLISTENER, new Exception.BackendlessFault(ex)); } }, fault => { ErrorHandler?.Invoke(RTErrorType.USERSTATUSLISTENER, fault); }); AddUserListener(rtCallback); }
public void AddCommandListener <TR>(CommandReceived <TR> callback, IChannel channel) { IRTCallback rtCallback = new RTCallback <TR>(callback, result => { try { Command <TR> command = new Command <TR>(); UserInfo userInfo = new UserInfo(); command.UserInfo = userInfo; userInfo.ConnectionId = WeborbSerializationHelper.AsString(result, "connectionId"); userInfo.UserId = WeborbSerializationHelper.AsString(result, "userId"); command.Type = WeborbSerializationHelper.AsString(result, "type"); IAdaptingType data = WeborbSerializationHelper.AsAdaptingType(result, "data"); command.Data = (TR)data.adapt(typeof(TR)); callback(command); } catch (System.Exception e) { channel.ErrorHandler?.Invoke(RTErrorType.COMMAND, new BackendlessFault(e)); } }, fault => { channel.ErrorHandler?.Invoke(RTErrorType.COMMAND, fault); }); AddCommandListener(rtCallback); }