Exemple #1
0
        /// <summary>
        /// Starts the continuous query.
        /// </summary>
        private ClientContinuousQueryHandle QueryContinuousInternal(
            ContinuousQueryClient <TK, TV> continuousQuery)
        {
            Debug.Assert(continuousQuery != null);
            Debug.Assert(continuousQuery.Listener != null);

            var listener = continuousQuery.Listener;

            return(DoOutInOp(
                       ClientOp.QueryContinuous,
                       ctx => WriteContinuousQuery(ctx, continuousQuery),
                       ctx =>
            {
                var queryId = ctx.Stream.ReadLong();

                var qryHandle = new ClientContinuousQueryHandle(ctx.Socket, queryId);

                ctx.Socket.AddNotificationHandler(queryId,
                                                  (stream, err) => HandleContinuousQueryEvents(stream, err, listener, qryHandle));

                return qryHandle;
            }));
        }
Exemple #2
0
        /// <summary>
        /// Handles continuous query events.
        /// </summary>
        private void HandleContinuousQueryEvents(IBinaryStream stream, Exception err,
                                                 ICacheEntryEventListener <TK, TV> listener, ClientContinuousQueryHandle qryHandle)
        {
            if (err != null)
            {
                qryHandle.OnError(err);
                return;
            }

            var flags  = (ClientFlags)stream.ReadShort();
            var opCode = (ClientOp)stream.ReadShort();

            if ((flags & ClientFlags.Error) == ClientFlags.Error)
            {
                var status = (ClientStatusCode)stream.ReadInt();
                var msg    = _marsh.Unmarshal <string>(stream);

                GetLogger().Error("Error while handling Continuous Query notification ({0}): {1}", status, msg);

                qryHandle.OnError(new IgniteClientException(msg, null, status));

                return;
            }

            if (opCode == ClientOp.QueryContinuousEventNotification)
            {
                var evts = ContinuousQueryUtils.ReadEvents <TK, TV>(stream, _marsh, _keepBinary);

                listener.OnEvent(evts);

                return;
            }

            GetLogger().Error("Error while handling Continuous Query notification: unexpected op '{0}'", opCode);
        }