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); }