void OnSerializing(StreamingContext context) { IPersistNode persist = _convert as IPersistNode; if (persist != null) { _state = persist.GetState(GetLogger()); } _container = DynamicScriptContainer.GetCachedContainer(_container); }
/// <summary> /// Get a cached version of the container /// </summary> /// <param name="key">The container</param> /// <returns>The identified script container</returns> public static DynamicScriptContainer GetCachedContainer(DynamicScriptContainer key) { lock (_cache) { if (!_cache.ContainsKey(key)) { _cache[key] = key; } return(_cache[key]); } }
/// <summary> /// Constructor /// </summary> /// <param name="name">The name of the key</param> /// <param name="container">The script container</param> /// <param name="logger">The logger</param> /// <param name="state">The object state</param> protected DynamicDataKey(string name, DynamicScriptContainer container, Logger logger, object state) : base(name) { _container = container; _logger = logger; if (state != null) { if (!state.GetType().IsSerializable) { throw new ArgumentException(CANAPE.Scripting.Properties.Resources.DynamicDataKey_StateNotSerializable, "state"); } _state = state; } }
/// <summary> /// Equals method /// </summary> /// <param name="obj">The other object</param> /// <returns>True if other object is equal</returns> public override bool Equals(object obj) { bool ret = ReferenceEquals(this, obj); // If reference equals then it is automatically the same if (!ret) { DynamicScriptContainer other = obj as DynamicScriptContainer; if (other != null) { ret = _container.Equals(other._container) && _classname == other._classname; } else { ret = false; } } return(ret); }
private void OnDeserialized(StreamingContext context) { _container = DynamicScriptContainer.GetCachedContainer(_container); }
/// <summary> /// Get a cached version of the container /// </summary> /// <param name="key">The container</param> /// <returns>The identified script container</returns> public static DynamicScriptContainer GetCachedContainer(DynamicScriptContainer key) { lock (_cache) { if (!_cache.ContainsKey(key)) { _cache[key] = key; } return _cache[key]; } }
/// <summary> /// Constructor /// </summary> /// <param name="name">Name of key</param> /// <param name="container">The script container</param> /// <param name="logger">The logger</param> /// <param name="state">The state of the key</param> public DynamicStringDataKey2(string name, DynamicScriptContainer container, Logger logger, object state) : base(name, container, logger, state) { }
private static IEnumerable<DataFrame> ReadFrames(IDataAdapter client, DynamicScriptContainer container, Logger logger, object config) { DataReader reader = new DataReader(new DataAdapterToStream(client)); while (!reader.Eof) { DynamicStreamDataKey2 key = new DynamicStreamDataKey2("Root", container, logger, config); try { key.FromReader(reader); } catch (ThreadAbortException) { throw; } catch (EndOfStreamException) { // End of stream, do nothing } catch (Exception e) { logger.LogException(e); yield break; } // Only fill in the frame if we read something, should this exit if it continues to read nothing? if (reader.ByteCount > 0) { yield return new DataFrame(key); } } }
/// <summary> /// Constructor /// </summary> /// <param name="container">The script container for both directions</param> /// <param name="logger">Logger to log output</param> public ParserNetworkLayer(DynamicScriptContainer container, Logger logger) : this(container, container, logger) { }
/// <summary> /// Constructor /// </summary> /// <param name="clientContainer">The script container for the client sourced packets</param> /// <param name="serverContainer">The script container for the server sourced packets</param> /// <param name="logger">Logger to log output</param> public ParserNetworkLayer(DynamicScriptContainer clientContainer, DynamicScriptContainer serverContainer, Logger logger) { _clientContainer = clientContainer; _serverContainer = serverContainer; _logger = logger; }