Пример #1
0
        protected CommandInfo ParseCommand(Alachisoft.NCache.Common.Protobuf.Command command, ClientManager clientManager, string cacheId)
        {
            CommandInfo cmdInfo     = new CommandInfo();
            int         packageSize = 0;
            int         index       = 0;
            string      version     = string.Empty;
            NCache      nCache      = clientManager.CmdExecuter as NCache;

            Caching.Cache cache = nCache.Cache;
            Hashtable     queryInfoHashtable = null;
            Hashtable     tagHashtable       = null;
            Hashtable     namedTagHashtable  = null;

            switch (command.type)
            {
            case Alachisoft.NCache.Common.Protobuf.Command.Type.ADD_BULK:
                Alachisoft.NCache.Common.Protobuf.BulkAddCommand bulkAddCommand = command.bulkAddCommand;

                packageSize = bulkAddCommand.addCommand.Count;

                cmdInfo.Keys    = new string[packageSize];
                cmdInfo.Entries = new CacheEntry[packageSize];
                cmdInfo.OnDsItemsAddedCallback = (short)bulkAddCommand.datasourceItemAddedCallbackId;
                cmdInfo.ProviderName           = bulkAddCommand.providerName.Length == 0 ? null : bulkAddCommand.providerName;
                cmdInfo.RequestId         = bulkAddCommand.requestId.ToString();
                cmdInfo.ClientLastViewId  = command.clientLastViewId;
                cmdInfo.IntendedRecipient = command.intendedRecipient;

                cmdInfo.returnVersion = bulkAddCommand.returnVersions;

                foreach (Alachisoft.NCache.Common.Protobuf.AddCommand addCommand in bulkAddCommand.addCommand)
                {
                    cmdInfo.Keys[index] = addCommand.key;
                    cmdInfo.ClientID    = addCommand.clientID;
                    if (index == 0)
                    {
                        cmdInfo.Flag = new BitSet((byte)addCommand.flag);
                    }
                    object value = cache.SocketServerDataService.GetCacheData(addCommand.data.ToArray(), cmdInfo.Flag);
                    cmdInfo.Entries[index] = new CacheEntry(value, Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(cache.Configuration.ExpirationPolicy, addCommand.dependency, addCommand.absExpiration, addCommand.sldExpiration, addCommand.isResync, serailizationContext), new PriorityEvictionHint((CacheItemPriority)addCommand.priority));
                    CallbackEntry cbEntry = null;
                    if ((short)addCommand.updateCallbackId != -1 || (short)addCommand.removeCallbackId != -1 || cmdInfo.OnDsItemsAddedCallback != -1)
                    {
                        cbEntry = new CallbackEntry(!string.IsNullOrEmpty(cmdInfo.ClientID) ? cmdInfo.ClientID : clientManager.ClientID,
                                                    Convert.ToInt32(cmdInfo.RequestId),
                                                    value,
                                                    (short)addCommand.removeCallbackId,
                                                    (short)addCommand.updateCallbackId,
                                                    (short)(cmdInfo.RequestId.Equals("-1") ? -1 : 0),
                                                    cmdInfo.OnDsItemsAddedCallback,
                                                    new BitSet((byte)addCommand.flag),
                                                    (EventDataFilter)(addCommand.updateDataFilter != -1 ? (int)addCommand.updateDataFilter : (int)EventDataFilter.None),
                                                    (EventDataFilter)(addCommand.removeDataFilter != -1 ? (int)addCommand.removeDataFilter : (int)EventDataFilter.DataWithMetadata)
                                                    );
                        cmdInfo.Entries[index].Value = cbEntry.Clone();
                    }

                    cmdInfo.onUpdateCallbackId = (short)addCommand.updateCallbackId;
                    if (addCommand.group != null)
                    {
                        cmdInfo.Group = addCommand.group.Length == 0 ? null : addCommand.group;
                    }
                    if (addCommand.subGroup != null)
                    {
                        cmdInfo.SubGroup = addCommand.subGroup.Length == 0 ? null : addCommand.subGroup;
                    }

                    if (!String.IsNullOrEmpty(cmdInfo.Group))
                    {
                        cmdInfo.Entries[index].GroupInfo = new GroupInfo(cmdInfo.Group, cmdInfo.SubGroup);
                    }

                    version = command.version;

                    if (string.IsNullOrEmpty(version))
                    {
                        queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(addCommand.queryInfo);
                        tagHashtable       = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromTagInfoObj(addCommand.tagInfo);
                        if (clientManager.IsDotNetClient)
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromDotNet(addCommand.namedTagInfo);
                        }
                        else
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromJava(addCommand.namedTagInfo);
                        }
                    }
                    else
                    {
                        ObjectQueryInfo objectQueryInfo = addCommand.objectQueryInfo;

                        queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(objectQueryInfo.queryInfo);
                        tagHashtable       = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromTagInfoObj(objectQueryInfo.tagInfo);
                        if (clientManager.IsDotNetClient)
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromDotNet(objectQueryInfo.namedTagInfo);
                        }
                        else
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromJava(objectQueryInfo.namedTagInfo);
                        }
                    }
                    if (queryInfoHashtable != null)
                    {
                        if (cmdInfo.Entries[index].QueryInfo == null)
                        {
                            cmdInfo.Entries[index].QueryInfo = new Hashtable();
                        }
                        cmdInfo.Entries[index].QueryInfo.Add("query-info", queryInfoHashtable);
                    }

                    if (tagHashtable != null)
                    {
                        if (cmdInfo.Entries[index].QueryInfo == null)
                        {
                            cmdInfo.Entries[index].QueryInfo = new Hashtable();
                        }
                        cmdInfo.Entries[index].QueryInfo.Add("tag-info", tagHashtable);
                    }

                    if (namedTagHashtable != null)
                    {
                        if (cmdInfo.Entries[index].QueryInfo == null)
                        {
                            cmdInfo.Entries[index].QueryInfo = new Hashtable();
                        }
                        cmdInfo.Entries[index].QueryInfo.Add("named-tag-info", namedTagHashtable);
                    }

                    cmdInfo.Entries[index].SyncDependency = base.GetCacheSyncDependencyObj(addCommand.syncDependency);
                    index++;
                }

                break;

            case Alachisoft.NCache.Common.Protobuf.Command.Type.INSERT_BULK:
                Alachisoft.NCache.Common.Protobuf.BulkInsertCommand bulkInsertCommand = command.bulkInsertCommand;

                packageSize = bulkInsertCommand.insertCommand.Count;

                cmdInfo.Keys    = new string[packageSize];
                cmdInfo.Entries = new CacheEntry[packageSize];

                cmdInfo.OnDsItemsAddedCallback = (short)bulkInsertCommand.datasourceUpdatedCallbackId;
                cmdInfo.ProviderName           = bulkInsertCommand.providerName.Length == 0 ? null : bulkInsertCommand.providerName;
                cmdInfo.RequestId         = bulkInsertCommand.requestId.ToString();
                cmdInfo.ClientLastViewId  = command.clientLastViewId;
                cmdInfo.IntendedRecipient = command.intendedRecipient;

                cmdInfo.returnVersion = bulkInsertCommand.returnVersions;

                foreach (Alachisoft.NCache.Common.Protobuf.InsertCommand insertCommand in bulkInsertCommand.insertCommand)
                {
                    cmdInfo.Keys[index] = insertCommand.key;
                    cmdInfo.ClientID    = insertCommand.clientID;
                    if (index == 0)
                    {
                        cmdInfo.Flag = new BitSet((byte)insertCommand.flag);
                    }
                    object value = cache.SocketServerDataService.GetCacheData(insertCommand.data.ToArray(), cmdInfo.Flag);
                    cmdInfo.Entries[index] = new CacheEntry(value, Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(cache.Configuration.ExpirationPolicy, insertCommand.dependency, insertCommand.absExpiration, insertCommand.sldExpiration, insertCommand.isResync, serailizationContext), new PriorityEvictionHint((CacheItemPriority)insertCommand.priority));


                    CallbackEntry cbEntry = null;
                    if (insertCommand.updateCallbackId != -1 || insertCommand.removeCallbackId != -1 || cmdInfo.OnDsItemsAddedCallback != -1)
                    {
                        cbEntry = new CallbackEntry(!string.IsNullOrEmpty(cmdInfo.ClientID) ? cmdInfo.ClientID : clientManager.ClientID,
                                                    Convert.ToInt32(cmdInfo.RequestId),
                                                    value,
                                                    (short)insertCommand.removeCallbackId,
                                                    (short)insertCommand.updateCallbackId,
                                                    (short)(cmdInfo.RequestId.Equals("-1") ? -1 : 0),
                                                    cmdInfo.OnDsItemsAddedCallback,
                                                    new BitSet((byte)insertCommand.flag),
                                                    (EventDataFilter)(insertCommand.updateDataFilter != -1 ? (int)insertCommand.updateDataFilter : (int)EventDataFilter.None),
                                                    (EventDataFilter)(insertCommand.removeDataFilter != -1 ? (int)insertCommand.removeDataFilter : (int)EventDataFilter.None)
                                                    );
                        cmdInfo.Entries[index].Value = cbEntry.Clone();
                    }

                    cmdInfo.onUpdateCallbackId = (short)insertCommand.updateCallbackId;

                    if (insertCommand.group != null)
                    {
                        cmdInfo.Group = insertCommand.group.Length == 0 ? null : insertCommand.group;
                    }
                    if (insertCommand.subGroup != null)
                    {
                        cmdInfo.SubGroup = insertCommand.subGroup.Length == 0 ? null : insertCommand.subGroup;
                    }
                    if (!String.IsNullOrEmpty(cmdInfo.Group))
                    {
                        cmdInfo.Entries[index].GroupInfo = new GroupInfo(cmdInfo.Group, cmdInfo.SubGroup);
                    }

                    version = command.version;

                    if (string.IsNullOrEmpty(version))
                    {
                        queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(insertCommand.queryInfo);
                        tagHashtable       = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromTagInfoObj(insertCommand.tagInfo);
                        if (clientManager.IsDotNetClient)
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromDotNet(insertCommand.namedTagInfo);
                        }
                        else
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromJava(insertCommand.namedTagInfo);
                        }
                    }
                    else
                    {
                        ObjectQueryInfo objectQueryInfo = insertCommand.objectQueryInfo;

                        queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(objectQueryInfo.queryInfo);

                        tagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromTagInfoObj(objectQueryInfo.tagInfo);

                        if (clientManager.IsDotNetClient)
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromDotNet(objectQueryInfo.namedTagInfo);
                        }
                        else
                        {
                            namedTagHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromNamedTagInfoObjFromJava(objectQueryInfo.namedTagInfo);
                        }
                    }

                    if (queryInfoHashtable != null)
                    {
                        if (cmdInfo.Entries[index].QueryInfo == null)
                        {
                            cmdInfo.Entries[index].QueryInfo = new Hashtable();
                        }
                        cmdInfo.Entries[index].QueryInfo.Add("query-info", queryInfoHashtable);
                    }

                    if (tagHashtable != null)
                    {
                        if (cmdInfo.Entries[index].QueryInfo == null)
                        {
                            cmdInfo.Entries[index].QueryInfo = new Hashtable();
                        }
                        cmdInfo.Entries[index].QueryInfo.Add("tag-info", tagHashtable);
                    }

                    if (namedTagHashtable != null)
                    {
                        if (cmdInfo.Entries[index].QueryInfo == null)
                        {
                            cmdInfo.Entries[index].QueryInfo = new Hashtable();
                        }
                        cmdInfo.Entries[index].QueryInfo.Add("named-tag-info", namedTagHashtable);
                    }

                    cmdInfo.Entries[index].SyncDependency = base.GetCacheSyncDependencyObj(insertCommand.syncDependency);

                    index++;
                }

                break;
            }

            return(cmdInfo);
        }
        //PROTOBUF
        protected CommandInfo ParseCommand(Alachisoft.NCache.Common.Protobuf.Command command, ClientManager clientManager, string cacheId)
        {
            CommandInfo cmdInfo            = new CommandInfo();
            int         packageSize        = 0;
            int         index              = 0;
            string      version            = string.Empty;
            Hashtable   queryInfoHashtable = null;

            switch (command.type)
            {
            case Alachisoft.NCache.Common.Protobuf.Command.Type.ADD_BULK:
                Alachisoft.NCache.Common.Protobuf.BulkAddCommand bulkAddCommand = command.bulkAddCommand;

                packageSize = bulkAddCommand.addCommand.Count;

                cmdInfo.Keys    = new string[packageSize];
                cmdInfo.Entries = new CacheEntry[packageSize];

                cmdInfo.RequestId         = bulkAddCommand.requestId.ToString();
                cmdInfo.ClientLastViewId  = command.clientLastViewId;
                cmdInfo.IntendedRecipient = command.intendedRecipient;
                foreach (Alachisoft.NCache.Common.Protobuf.AddCommand addCommand in bulkAddCommand.addCommand)
                {
                    cmdInfo.Keys[index] = addCommand.key;

                    cmdInfo.Entries[index] = new CacheEntry(UserBinaryObject.CreateUserBinaryObject(addCommand.data.ToArray()), Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(addCommand.absExpiration, addCommand.sldExpiration, serailizationContext), new PriorityEvictionHint((CacheItemPriority)addCommand.priority));
                    if (index == 0)
                    {
                        cmdInfo.Flag = new BitSet((byte)addCommand.flag);
                    }

                    CallbackEntry cbEntry = null;
                    if ((short)addCommand.updateCallbackId != -1 || (short)addCommand.removeCallbackId != -1)
                    {
                        cbEntry = new CallbackEntry(ClientId,
                                                    Convert.ToInt32(cmdInfo.RequestId),
                                                    UserBinaryObject.CreateUserBinaryObject(addCommand.data.ToArray()),
                                                    (short)addCommand.removeCallbackId,
                                                    (short)addCommand.updateCallbackId,
                                                    new BitSet((byte)addCommand.flag),
                                                    (EventDataFilter)(addCommand.updateDataFilter != -1 ? (int)addCommand.updateDataFilter : (int)EventDataFilter.None),
                                                    (EventDataFilter)(addCommand.removeDataFilter != -1 ? (int)addCommand.removeDataFilter : (int)EventDataFilter.DataWithMetadata)
                                                    );
                        cmdInfo.Entries[index].Value = cbEntry.Clone();
                    }



                    version = command.version;

                    if (string.IsNullOrEmpty(version))
                    {
                        queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(addCommand.queryInfo);
                    }
                    else
                    {
                        ObjectQueryInfo objectQueryInfo;

                        objectQueryInfo = addCommand.objectQueryInfo;

                        queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(objectQueryInfo.queryInfo);
                    }

                    if (queryInfoHashtable != null)
                    {
                        if (cmdInfo.Entries[index].QueryInfo == null)
                        {
                            cmdInfo.Entries[index].QueryInfo = new Hashtable();
                        }
                        cmdInfo.Entries[index].QueryInfo.Add("query-info", queryInfoHashtable);
                    }



                    index++;
                }

                break;

            case Alachisoft.NCache.Common.Protobuf.Command.Type.INSERT_BULK:
                Alachisoft.NCache.Common.Protobuf.BulkInsertCommand bulkInsertCommand = command.bulkInsertCommand;

                packageSize = bulkInsertCommand.insertCommand.Count;

                cmdInfo.Keys              = new string[packageSize];
                cmdInfo.Entries           = new CacheEntry[packageSize];
                cmdInfo.RequestId         = bulkInsertCommand.requestId.ToString();
                cmdInfo.ClientLastViewId  = command.clientLastViewId;
                cmdInfo.IntendedRecipient = command.intendedRecipient;
                foreach (Alachisoft.NCache.Common.Protobuf.InsertCommand insertCommand in bulkInsertCommand.insertCommand)
                {
                    cmdInfo.Keys[index]    = insertCommand.key;
                    cmdInfo.Entries[index] = new CacheEntry(UserBinaryObject.CreateUserBinaryObject(insertCommand.data.ToArray()), Alachisoft.NCache.Caching.Util.ProtobufHelper.GetExpirationHintObj(insertCommand.absExpiration, insertCommand.sldExpiration, serailizationContext), new PriorityEvictionHint((CacheItemPriority)insertCommand.priority));
                    if (index == 0)
                    {
                        cmdInfo.Flag = new BitSet((byte)insertCommand.flag);
                    }

                    CallbackEntry cbEntry = null;
                    if (insertCommand.updateCallbackId != -1 || insertCommand.removeCallbackId != -1)
                    {
                        cbEntry = new CallbackEntry(ClientId,
                                                    Convert.ToInt32(cmdInfo.RequestId),
                                                    UserBinaryObject.CreateUserBinaryObject(insertCommand.data.ToArray()),
                                                    (short)insertCommand.removeCallbackId,
                                                    (short)insertCommand.updateCallbackId,
                                                    new BitSet((byte)insertCommand.flag),
                                                    (EventDataFilter)(insertCommand.updateDataFilter != -1 ? (int)insertCommand.updateDataFilter : (int)EventDataFilter.None),
                                                    (EventDataFilter)(insertCommand.removeDataFilter != -1 ? (int)insertCommand.removeDataFilter : (int)EventDataFilter.None)
                                                    );
                        cmdInfo.Entries[index].Value = cbEntry.Clone();
                    }


                    version = command.version;

                    if (string.IsNullOrEmpty(version))
                    {
                        queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(insertCommand.queryInfo);
                    }
                    else
                    {
                        ObjectQueryInfo objectQueryInfo;

                        objectQueryInfo    = insertCommand.objectQueryInfo;
                        queryInfoHashtable = Alachisoft.NCache.Caching.Util.ProtobufHelper.GetHashtableFromQueryInfoObj(objectQueryInfo.queryInfo);
                    }

                    if (queryInfoHashtable != null)
                    {
                        if (cmdInfo.Entries[index].QueryInfo == null)
                        {
                            cmdInfo.Entries[index].QueryInfo = new Hashtable();
                        }
                        cmdInfo.Entries[index].QueryInfo.Add("query-info", queryInfoHashtable);
                    }

                    index++;
                }

                break;
            }

            return(cmdInfo);
        }