Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        private IRTRequest HandleResult <T>(Object[] args, IDictionary <String, T> requestMap, String resultKey) where T : IRTRequest
        {
            if (args == null || args.Length < 1)
            {
                Log.log(Backendless.BACKENDLESSLOG, "subscription result is null or empty");
                return(null);
            }

            AnonymousObject result = (AnonymousObject)WeborbSerializationHelper.Deserialize((byte[])args[0]);

            String id = WeborbSerializationHelper.AsString(result, "id");

            Log.log(Backendless.BACKENDLESSLOG, String.Format("Got result for subscription {0}", id));

            IRTRequest request = requestMap[id];

            if (request == null)
            {
                Log.log(Backendless.BACKENDLESSLOG, String.Format("There is no handler for subscription {0}", id));
                return(null);
            }

            Object error = WeborbSerializationHelper.AsObject(result, "error");

            if (error != null)
            {
                Log.log(Backendless.BACKENDLESSLOG, String.Format("got error {0}", error));
                BackendlessFault fault = new BackendlessFault(error.ToString());
                request.Callback.errorHandler(fault);
                return(request);
            }

            IAdaptingType data = WeborbSerializationHelper.AsAdaptingType(result, resultKey);

            request.Callback.responseHandler(data);
            return(request);
        }