Updates to SharpLib

This commit is contained in:
Marc Hernandez 2021-06-17 01:47:52 -07:00
parent 26716c6648
commit 2844950af3
22 changed files with 2380 additions and 2494 deletions

5
.gitignore vendored
View File

@ -1,7 +1,3 @@
###################################
# Git ignore file for Molyjam2012 #
###################################
#Folders
Library/
Temp/
@ -12,6 +8,7 @@ Release/
run/
bin/
obj/
.vs/
#Project/User Preference Files
*.pidb

View File

@ -1,8 +1,8 @@


/*
* TODO: Need to verify types are correct when deserializing.
*/
*/
using System;
using System.Collections.Generic;
using System.Linq;
@ -22,10 +22,10 @@ namespace lib
{
FileStream fs = new FileStream( filename, FileMode.Create, FileAccess.Write );
XmlSerializer xs = new XmlSerializer( obj.GetType() );
//MemoryStream memoryStream = new MemoryStream( StringToUTF8ByteArray( pXmlizedString ) );
//XmlTextReader reader = new XmlTextReader( fs, Encoding.UTF8 );
XmlSerializer xs = new XmlSerializer( obj.GetType() );
//MemoryStream memoryStream = new MemoryStream( StringToUTF8ByteArray( pXmlizedString ) );
//XmlTextReader reader = new XmlTextReader( fs, Encoding.UTF8 );
xs.Serialize( fs, obj );
}
@ -33,10 +33,10 @@ namespace lib
{
FileStream fs = new FileStream( filename, FileMode.Open, FileAccess.Read );
XmlSerializer xs = new XmlSerializer( typeof( TType ) );
//MemoryStream memoryStream = new MemoryStream( StringToUTF8ByteArray( pXmlizedString ) );
//XmlTextReader reader = new XmlTextReader( fs, Encoding.UTF8 );
XmlSerializer xs = new XmlSerializer( typeof( TType ) );
//MemoryStream memoryStream = new MemoryStream( StringToUTF8ByteArray( pXmlizedString ) );
//XmlTextReader reader = new XmlTextReader( fs, Encoding.UTF8 );
return xs.Deserialize( fs );
}
@ -72,10 +72,10 @@ namespace lib
{
XmlTextWriter xmlWriter = new XmlTextWriter( filename, null );
xmlWriter.Formatting = Formatting.Indented;
//xmlWriter.WriteStartDocument();
xmlWriter.Formatting = Formatting.Indented;
//xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement( "dictionary" );
Type[] types = dict.GetType().GetGenericArguments();
@ -93,10 +93,10 @@ namespace lib
xmlWriter.WriteEndElement();
}
xmlWriter.WriteEndElement();
//xmlWriter.WriteEndDocument();
xmlWriter.WriteEndElement();
//xmlWriter.WriteEndDocument();
xmlWriter.Close();
}
@ -106,10 +106,10 @@ namespace lib
XmlDocument doc = new XmlDocument();
doc.Load( fs );
//CreateTypeFor()
doc.Load( fs );
//CreateTypeFor()
XmlElement docElem = doc.DocumentElement;
if( docElem.Name == "dictionary" )
@ -125,10 +125,10 @@ namespace lib
{
XmlNodeList nodeList = docElem.ChildNodes;
object[] args = new object[ 1 ];
//fi.SetValue( newObj, obj );
object[] args = new object[ 1 ];
//fi.SetValue( newObj, obj );
foreach( XmlElement node in nodeList )
{
if( node.Name == "kvp" )
@ -147,28 +147,28 @@ namespace lib
}
else
{
Log.error( String.Format( $"No attributes in node while loading file {filename}" ) );
log.error( String.Format( $"No attributes in node while loading file {filename}" ) );
}
}
else
{
Log.error( String.Format( $"Incorrect key {node.Name} found while loading file {filename}" ) );
log.error( String.Format( $"Incorrect key {node.Name} found while loading file {filename}" ) );
}
}
}
else
{
if( keyMI == null )
Log.error( String.Format( $"Key type conversion not found for type {keyType}" ) );
log.error( String.Format( $"Key type conversion not found for type {keyType}" ) );
if( valMI == null )
Log.error( String.Format( $"Val type conversion not found for type {valType}" ) );
log.error( String.Format( $"Val type conversion not found for type {valType}" ) );
}
}
else
{
Log.error( String.Format( $"No dictionary element found while loading file {filename}" ) );
log.error( String.Format( $"No dictionary element found while loading file {filename}" ) );
}
}

1232
Id.cs

File diff suppressed because it is too large Load Diff

View File

@ -23,6 +23,7 @@
<ItemGroup>
<Folder Include="Properties\" />
<Folder Include="reflect\" />
</ItemGroup>

108
Token.cs
View File

@ -1,54 +1,54 @@
using System;
using System.Diagnostics;
namespace lib
{
//TODO PERF fix this and make it fast.
[Serializable]
public struct Token
{
public string str { get { return m_str; } }
public Token( String str )
{
m_str = str;
m_hash = m_str.GetHashCode();
}
public override bool Equals( object obj )
{
if( !( obj is Token ) )
return false;
//This doesnt use as because Token is a struct
var otherId = (Token)obj;
if( m_hash != otherId.m_hash )
return false;
return m_str == otherId.m_str;
}
public bool Equals_fast( Token other )
{
return m_hash == other.m_hash && m_str == other.m_str;
}
public override int GetHashCode()
{
return m_hash;
}
public override string ToString()
{
return m_str;
}
int m_hash;
String m_str;
}
}
using System;
using System.Diagnostics;
namespace lib
{
//TODO PERF fix this and make it fast.
[Serializable]
public struct Token
{
public string str { get { return m_str; } }
public Token( String str )
{
m_str = str;
m_hash = m_str.GetHashCode();
}
public override bool Equals( object obj )
{
if( !( obj is Token ) )
return false;
//This doesnt use as because Token is a struct
var otherId = (Token)obj;
if( m_hash != otherId.m_hash )
return false;
return m_str == otherId.m_str;
}
public bool Equals_fast( Token other )
{
return m_hash == other.m_hash && m_str == other.m_str;
}
public override int GetHashCode()
{
return m_hash;
}
public override string ToString()
{
return m_str;
}
int m_hash;
String m_str;
}
}

View File

@ -1,32 +1,32 @@
// Copyright (c) Xenko contributors (https://xenko.com) and Silicon Studio Corp. (https://www.siliconstudio.co.jp)
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
//
// Copyright (c) 2010-2012 SharpDX - Alexandre Mutel
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
// Copyright (c) Xenko contributors (https://xenko.com) and Silicon Studio Corp. (https://www.siliconstudio.co.jp)
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
//
// Copyright (c) 2010-2012 SharpDX - Alexandre Mutel
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
#pragma warning disable SA1300 // Element must begin with upper-case letter
#pragma warning disable SA1649 // File name must match first type name
using System;
using System.Runtime.CompilerServices;
namespace lib
{
{
/// <summary>
/// Utility class.
/// </summary>

View File

@ -22,6 +22,7 @@
// THE SOFTWARE.
#pragma warning disable SA1405 // Debug.Assert must provide message text
using att;
using System;
using System.Collections;
using System.Collections.Generic;
@ -88,12 +89,12 @@ namespace lib
{
if( !Directory.Exists( path ) )
{
lib.Log.info( $"Creating directory {path}" );
log.info( $"Creating directory {path}" );
Directory.CreateDirectory( path );
}
else
{
lib.Log.debug( $"{path} already exists." );
log.debug( $"{path} already exists." );
}
}
@ -216,7 +217,7 @@ namespace lib
unsafe
{
fixed ( void* pBuffer = buffer )
fixed( void* pBuffer = buffer )
Interop.Write( pBuffer, source, 0, source.Length );
}
return buffer;
@ -339,7 +340,7 @@ namespace lib
{
unsafe
{
fixed ( void* pDest = destination )
fixed( void* pDest = destination )
{
Write( (IntPtr)pDest, data, offset, count );
}

View File

@ -1,6 +1,6 @@
// Copyright (c) Xenko contributors (https://xenko.com) and Silicon Studio Corp. (https://www.siliconstudio.co.jp)
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
// Copyright (c) Xenko contributors (https://xenko.com) and Silicon Studio Corp. (https://www.siliconstudio.co.jp)
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
/* MIT License
Copyright (c) 2016 JetBrains http://www.jetbrains.com
@ -21,12 +21,12 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. */
SOFTWARE. */
using System;
namespace att
{
{
/// <summary>
/// Indicates that the value of the marked element could be <c>null</c> sometimes, so the check for <c>null</c>
/// is necessary before its usage.
@ -45,7 +45,7 @@ namespace att
AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Property |
AttributeTargets.Delegate | AttributeTargets.Field | AttributeTargets.Event |
AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.GenericParameter )]
public sealed class CanBeNullAttribute : Attribute
public sealed class CanBeNullAttribute: Attribute
{
}
}

View File

@ -1,10 +1,10 @@
// Copyright (c) Xenko contributors (https://xenko.com) and Silicon Studio Corp. (https://www.siliconstudio.co.jp)
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
// Copyright (c) Xenko contributors (https://xenko.com) and Silicon Studio Corp. (https://www.siliconstudio.co.jp)
// Distributed under the MIT license. See the LICENSE.md file in the project root for more information.
using System;
namespace att
{
{
/// <summary>
/// Indicates that the value of the marked element could never be <c>null</c>.
/// </summary>
@ -19,7 +19,7 @@ namespace att
AttributeTargets.Method | AttributeTargets.Parameter | AttributeTargets.Property |
AttributeTargets.Delegate | AttributeTargets.Field | AttributeTargets.Event |
AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.GenericParameter )]
public sealed class NotNullAttribute : Attribute
public sealed class NotNullAttribute: Attribute
{
}
}

View File

@ -6,7 +6,7 @@ using System.Reflection;
namespace lib
{
public class DescAttribute : Attribute
public class DescAttribute: Attribute
{
public string Desc { get; private set; }
@ -17,7 +17,7 @@ namespace lib
}
[Serializable]
public class ConfigCfg : Config
public class ConfigCfg: Config
{
public readonly bool writeOutTemplateFiles = true;
}
@ -83,7 +83,7 @@ namespace lib
try
{
FileStream fs = new FileStream( filename, FileMode.Open, FileAccess.Read );
FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
XmlFormatter2 formatter = new XmlFormatter2();
@ -93,13 +93,13 @@ namespace lib
}
catch( FileNotFoundException )
{
Type[] types = new Type[ 0 ];
object[] parms = new object[ 0 ];
Type[] types = new Type[0];
object[] parms = new object[0];
//types[ 0 ] = typeof( string );
//parms[ 0 ] = filename;
ConstructorInfo cons = t?.GetConstructor( types );
ConstructorInfo cons = t?.GetConstructor(types);
try
{
@ -107,7 +107,7 @@ namespace lib
}
catch( Exception e )
{
Log.error( $"Exception while creating config {t.ToString()}, Msg {e.Message}" );
log.error( $"Exception while creating config {t.ToString()}, Msg {e.Message}" );
}
//cfg.SetFilename( filename );
@ -116,11 +116,11 @@ namespace lib
{
var templateFile = $"templates/{filename}";
var dirName = Path.GetDirectoryName( templateFile );
var dirName = Path.GetDirectoryName(templateFile);
lib.Util.checkAndAddDirectory( dirName );
lib.Log.info( $"Writing out template config of type {t?.Name} in {templateFile}" );
log.info( $"Writing out template config of type {t?.Name} in {templateFile}" );
Config.save( cfg, templateFile );
}
@ -136,7 +136,7 @@ namespace lib
static public void save( Config cfg, String filename )
{
FileStream fs = new FileStream( filename, FileMode.Create, FileAccess.Write );
FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write);
XmlFormatter2 formatter = new XmlFormatter2();

View File

@ -8,66 +8,38 @@ using System.Collections.Immutable;
using System.Reflection;
//using System.Threading.Tasks;
namespace lib
static public class log
{
[Flags]
public enum LogTypeNew
{
Invalid = 0,
// Frequency
FrequencyBase = 1,
FrequencyBits = 2,
FrequencyMask = ( ( 1 << FrequencyBits ) - 1 ) << FrequencyBase,
Detail = 0b01 << FrequencyBase,
Normal = 0b10 << FrequencyBase,
Overview = 0b11 << FrequencyBase,
// Type
TypeBase = FrequencyBase + FrequencyBits,
TypeBits = 3,
TypeMask = ( ( 1 << TypeBits ) - 1 ) << TypeBase,
Startup = 0b001 << TypeBase,
Running = 0b010 << TypeBase,
Shutdown = 0b011 << TypeBase,
Error = 0b101 << TypeBase,
}
[Flags]
public enum LogType
{
Invalid = 0,
Trace = 1,
Debug = 2,
Info = 3,
High = 4,
Warn = 5,
Error = 6,
Fatal = 7,
Trace = 1,
Debug = 2,
Info = 3,
High = 4,
Warn = 5,
Error = 6,
Fatal = 7,
}
public struct LogEvent
{
public DateTime Time;
public LogType LogType;
public string Msg;
public string Path;
public int Line;
public string Member;
public LogType LogType;
public string Msg;
public string Path;
public int Line;
public string Member;
public string Cat;
public object Obj;
public string Cat;
public object Obj;
static ImmutableDictionary<string, string> m_shortname = ImmutableDictionary<string, string>.Empty;
static ImmutableDictionary<int, string> s_shortname = ImmutableDictionary<int, string>.Empty;
public LogEvent( LogType logType, string msg, string path, int line, string member, string cat, object obj )
@ -76,17 +48,18 @@ namespace lib
//Cache the automatic category names
if( string.IsNullOrEmpty( cat ) )
{
if( m_shortname.TryGetValue( path, out var autoCat ) )
var pathHash = path.GetHashCode();
if( s_shortname.TryGetValue( pathHash, out var autoCat ) )
{
cat = autoCat;
}
else
{
var pathPieces = path.Split('\\');
var pathPieces = path.Split( '\\' );
var lastDir = pathPieces[pathPieces.Length - 2];
var lastDir = pathPieces[ pathPieces.Length - 2 ];
ImmutableInterlocked.AddOrUpdate( ref m_shortname, path, lastDir, ( key, value ) => { return lastDir; } );
ImmutableInterlocked.AddOrUpdate( ref s_shortname, pathHash, lastDir, ( key, value ) => { return lastDir; } );
cat = lastDir;
}
@ -107,343 +80,257 @@ namespace lib
public class Log : TraceListener
static public void create( string filename )
{
static public void create( string filename )
createLog( filename );
}
static public void destroy()
{
string msg = "==============================================================================\nLogfile shutdown at " + DateTime.Now.ToString();
var evt = CreateLogEvent( LogType.Info, msg, "System", null );
writeToAll( evt );
stop();
}
static LogEvent CreateLogEvent( LogType logType, string msg, string cat, object obj, [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" )
{
var logEvent = new LogEvent( logType, msg, path, line, member, cat, obj );
return logEvent;
}
// Forwards.
static public void fatal( string msg, string cat = "", object obj = null, [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" )
{
logBase( msg, LogType.Fatal, path, line, member, cat, obj );
}
static public void error( string msg, string cat = "", object obj = null, [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" )
{
logBase( msg, LogType.Error, path, line, member, cat, obj );
}
static public void warn( string msg, string cat = "", object obj = null, [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" )
{
logBase( msg, LogType.Warn, path, line, member, cat, obj );
}
static public void info( string msg, string cat = "", object obj = null, [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" )
{
logBase( msg, LogType.Info, path, line, member, cat, obj );
}
static public void high( string msg, string cat = "", object obj = null, [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" )
{
logBase( msg, LogType.High, path, line, member, cat, obj );
}
static public void debug( string msg, string cat = "", object obj = null, [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" )
{
logBase( msg, LogType.Debug, path, line, member, cat, obj );
}
static public void trace( string msg, string cat = "", object obj = null, [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" )
{
logBase( msg, LogType.Trace, path, line, member, cat, obj );
}
static object s_lock = new object();
static public void logBase( string msg, LogType type = LogType.Debug, string path = "", int line = -1, string member = "", string cat = "unk", object obj = null )
{
// @@@@@ TODO Get rid of this lock.
var evt = new LogEvent( type, msg, path, line, member, cat, obj );
lock( s_lock )
{
s_log = new Log( filename );
}
static public void destroy()
{
string msg = "==============================================================================\nLogfile shutdown at " + DateTime.Now.ToString();
var evt = CreateLogEvent( LogType.Info, msg, "System", null );
s_log.writeToAll( evt );
s_log.stop();
s_log = null;
}
static public Log s_log;
/*
static public Log log
{
get
{
return s_log;
}
}
*/
static LogEvent CreateLogEvent( LogType logType, string msg, string cat, object obj, [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" )
{
var logEvent = new LogEvent( logType, msg, path, line, member, cat, obj );
return logEvent;
}
// Forwards.
static public void fatal( string msg, string cat = "", object obj = null, [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" )
{
log( msg, LogType.Fatal, path, line, member, cat, obj );
}
static public void error( string msg, string cat = "", object obj = null, [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" )
{
log( msg, LogType.Error, path, line, member, cat, obj );
}
static public void warn( string msg, string cat = "", object obj = null, [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" )
{
log( msg, LogType.Warn, path, line, member, cat, obj );
}
static public void info( string msg, string cat = "", object obj = null, [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" )
{
log( msg, LogType.Info, path, line, member, cat, obj );
}
static public void high( string msg, string cat = "", object obj = null, [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" )
{
log( msg, LogType.High, path, line, member, cat, obj );
}
static public void debug( string msg, string cat = "", object obj = null, [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" )
{
log( msg, LogType.Debug, path, line, member, cat, obj );
}
static public void trace( string msg, string cat = "", object obj = null, [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" )
{
log( msg, LogType.Trace, path, line, member, cat, obj );
}
static public void log( string msg, LogType type = LogType.Debug, string path = "", int line = -1, string member = "", string cat = "unk", object obj = null )
{
// @@@@@ TODO Get rid of this lock.
var evt = new LogEvent( type, msg, path, line, member, cat, obj );
lock( s_log )
{
s_log.writeToAll( evt );
}
}
static public void logProps( object obj, string header, LogType type = LogType.Debug, string cat = "", string prefix = "" )
{
var list = scr.GetAllProperties( obj.GetType() );
lock( s_log )
{
var evt = CreateLogEvent( type, header, cat, obj );
s_log.writeToAll( evt );
foreach( var pi in list )
{
try
{
var v = pi.GetValue( obj );
log( $"{prefix}{pi.Name} = {v}", type, cat );
}
catch( Exception ex )
{
log( $"Exception processing {pi.Name} {ex.Message}", LogType.Error, "log" );
}
}
}
}
//This might seem a little odd, but the intent is that usually you wont need to set notExpectedValue.
static public void expected<T>( T value, string falseString, string trueString = "", T notExpectedValue = default( T ) )
{
if( !value.Equals( notExpectedValue ) )
{
lib.Log.info( $"Properly got {value}{trueString}" );
}
else
{
lib.Log.warn( $"Got {notExpectedValue} instead of {value}{falseString}" );
}
}
private Log( string filename )
{
//TODO: Fix this so itll work without a directory.
Directory.CreateDirectory( Path.GetDirectoryName( filename ) );
m_stream = new FileStream( filename, FileMode.Append, FileAccess.Write );
m_writer = new StreamWriter( m_stream );
m_errorStream = new FileStream( filename + ".error", FileMode.Append, FileAccess.Write );
m_errorWriter = new StreamWriter( m_errorStream );
//Debug.Listeners.Add( this );
string msg = "\n==============================================================================\nLogfile " + filename + " startup at " + DateTime.Now.ToString();
var evt = CreateLogEvent( LogType.Info, msg, "System", null );
writeToAll( evt );
}
public override void Write( string msg )
{
WriteLine( msg );
}
public override void WriteLine( string msg )
{
error( msg );
//base.WriteLine( msg );
}
void stop()
{
m_writer.Close();
m_stream.Close();
m_errorWriter.Close();
m_errorStream.Close();
}
public void addDelegate( Log_delegate cb )
{
m_delegates.Add( cb );
}
/*
private void writeFileAndLine( StackTrace st )
{
StackFrame frame = st.GetFrame( 1 );
string srcFile = frame.GetFileName();
string srcLine = frame.GetFileLineNumber().Tostring();
Console.WriteLine( $"{srcFile} ({srcLine}):" );
}
private void writeStack( StackTrace st )
{
for( int i=0; i<st.FrameCount; ++i )
{
StackFrame frame = st.GetFrame( i );
string srcFile = frame.GetFileName();
string srcLine = frame.GetFileLineNumber().Tostring();
if( srcFile != null )
{
Console.WriteLine( $"{srcFile} ({srcLine})" );
}
}
}
*/
public static char getSymbol( LogType type )
{
switch( type )
{
case LogType.Trace:
return ' ';
case LogType.Debug:
return ' ';
case LogType.Info:
return ' ';
case LogType.High:
return '+';
case LogType.Warn:
return '+';
case LogType.Error:
return '*';
case LogType.Fatal:
return '*';
default:
return '?';
}
}
private void writeToAll( LogEvent evt )
{
try
{
// _SHOULDNT_ need this since we lock at the top.
//lock( this )
{
char sym = getSymbol( evt.LogType );
var truncatedCat = evt.Cat.Substring(0, Math.Min( 8, evt.Cat.Length ) );
string finalLine = string.Format( "{0,-8}{1}| {2}", truncatedCat, sym, evt.Msg );
//Console.WriteLine( finalMsg );
//Console.Out.Write( finalMsg );
/*
foreach( var l_obj in Debug.Listeners )
{
var l = l_obj as TraceListener;
if( l != null && l != this )
{
l.WriteLine( finalMsg );
}
}
*/
m_writer.WriteLine( finalLine );
m_writer.Flush();
foreach( Log_delegate cb in m_delegates )
{
//lock( cb )
{
cb( evt );
}
}
}
}
catch( Exception ex )
{
//oops.
//int dummy = 0;
}
}
/*
private void error_i( string msg, object obj )
{
//var t = Task.Run( () => {
StackTrace st = new StackTrace( true );
writeStack( st );
string msgPrint = msg;
if( args.Length > 0 )
{
msgPrint = string.Format( msg, args );
}
writeToAll( "error", "log", msgPrint );
//} );
}
private void warn_i( string msg, object obj )
{
//var t = Task.Run( () => {
StackTrace st = new StackTrace( true );
writeStack( st );
string msgPrint = msg;
if( args.Length > 0 )
{
msgPrint = string.Format( msg, args );
}
writeToAll( "warn", "log", msgPrint );
//});
}
private void info_i( string msg, object obj )
{
//var t = Task.Run( () => {
StackTrace st = new StackTrace( true );
string msgPrint = msg;
if( args.Length > 0 )
{
msgPrint = string.Format( msg, args );
}
writeToAll( "info", "log", msgPrint );
//} );
}
*/
private Stream m_stream;
private StreamWriter m_writer;
private Stream m_errorStream;
private StreamWriter m_errorWriter;
private ArrayList m_delegates = new ArrayList();
}
static public void logProps( object obj, string header, LogType type = LogType.Debug, string cat = "", string prefix = "", [CallerFilePath] string path = "", [CallerLineNumber] int line = -1, [CallerMemberName] string member = "" )
{
var list = refl.GetAllProperties( obj.GetType() );
lock( s_lock )
{
var evt = new LogEvent( type, header, path, line, member, cat, obj );
//var evt = CreateLogEvent( type, header, cat, obj );
writeToAll( evt );
foreach( var pi in list )
{
try
{
var v = pi.GetValue( obj );
logBase( $"{prefix}{pi.Name} = {v}", type, path, line, member, cat );
}
catch( Exception ex )
{
logBase( $"Exception processing {pi.Name} {ex.Message}", LogType.Error, "log" );
}
}
}
}
//This might seem a little odd, but the intent is that usually you wont need to set notExpectedValue.
static public void expected<T>( T value, string falseString, string trueString = "", T notExpectedValue = default( T ) )
{
if( !value.Equals( notExpectedValue ) )
{
log.info( $"Properly got {value}{trueString}" );
}
else
{
log.warn( $"Got {notExpectedValue} instead of {value}{falseString}" );
}
}
static private void createLog( string filename )
{
string dir = Path.GetDirectoryName( filename );
if( dir.Length > 0 )
{
Directory.CreateDirectory( dir );
}
s_stream = new FileStream( filename, FileMode.Append, FileAccess.Write );
s_writer = new StreamWriter( s_stream );
s_errorStream = new FileStream( filename + ".error", FileMode.Append, FileAccess.Write );
s_errorWriter = new StreamWriter( s_errorStream );
//Debug.Listeners.Add( this );
string msg = "\n==============================================================================\nLogfile " + filename + " startup at " + DateTime.Now.ToString();
var evt = CreateLogEvent( LogType.Info, msg, "System", null );
writeToAll( evt );
}
/*
static public override void Write( string msg ) {
WriteLine( msg );
}
static public override void WriteLine( string msg ) {
error( msg );
//base.WriteLine( msg );
}
*/
static void stop()
{
s_writer.Close();
s_stream.Close();
s_errorWriter.Close();
s_errorStream.Close();
}
static public void addDelegate( Log_delegate cb )
{
s_delegates.Add( cb );
}
public static char getSymbol( LogType type )
{
switch( type )
{
case LogType.Trace:
return ' ';
case LogType.Debug:
return ' ';
case LogType.Info:
return ' ';
case LogType.High:
return '+';
case LogType.Warn:
return '+';
case LogType.Error:
return '*';
case LogType.Fatal:
return '*';
default:
return '?';
}
}
static private void writeToAll( LogEvent evt )
{
try
{
// _SHOULDNT_ need this since we lock at the top.
//lock( this )
{
char sym = getSymbol( evt.LogType );
var truncatedCat = evt.Cat.Substring( 0, Math.Min( 8, evt.Cat.Length ) );
string finalLine = string.Format( "{0,-8}{1}| {2}", truncatedCat, sym, evt.Msg );
//Console.WriteLine( finalMsg );
//Console.Out.Write( finalMsg );
s_writer.WriteLine( finalLine );
Console.WriteLine( finalLine );
Debug.WriteLine( finalLine );
s_writer.Flush();
foreach( Log_delegate cb in s_delegates )
{
{
cb( evt );
}
}
}
}
catch( Exception ex )
{
Console.WriteLine( "EXCEPTION DURING LOGGING" );
Console.WriteLine( "EXCEPTION DURING LOGGING" );
Console.WriteLine( "EXCEPTION DURING LOGGING" );
Console.WriteLine( "EXCEPTION DURING LOGGING" );
Console.WriteLine( "EXCEPTION DURING LOGGING" );
Console.WriteLine( $"Exception {ex}" );
Debug.WriteLine( "EXCEPTION DURING LOGGING" );
Debug.WriteLine( "EXCEPTION DURING LOGGING" );
Debug.WriteLine( "EXCEPTION DURING LOGGING" );
Debug.WriteLine( "EXCEPTION DURING LOGGING" );
Debug.WriteLine( "EXCEPTION DURING LOGGING" );
Debug.WriteLine( $"Exception {ex}" );
}
}
private static Stream s_stream;
private static StreamWriter s_writer;
private static Stream s_errorStream;
private static StreamWriter s_errorWriter;
private static ArrayList s_delegates = new ArrayList();

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,8 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//using System.Threading.Tasks;
using System.Text;
//using System.Threading.Tasks;
using System.Diagnostics;
using System.Reflection;
@ -10,7 +10,7 @@ namespace mod
{
[Serializable]
public class Config : lib.Config
public class Config: lib.Config
{
public String name = "Generic";
}
@ -33,13 +33,13 @@ namespace mod
[Serializable]
public class FluidConfig : Config
public class FluidConfig: Config
{
public String type = "none";
}
public class FluidBase : Base
public class FluidBase: Base
{
public new FluidConfig Cfg { get { return (FluidConfig)base.Cfg; } }
@ -65,7 +65,7 @@ namespace mod
[Serializable]
public class SystemConfig : Config
public class SystemConfig: Config
{
public String type = "none";
}

View File

@ -20,7 +20,7 @@ namespace lib
public interface ISerDes<T> where T : IFormatter
{
T getInstance();
@ -28,7 +28,7 @@ namespace lib
}
public class NewEveryCall<T> : ISerDes<T> where T : IFormatter, new()
public class NewEveryCall<T>: ISerDes<T> where T : IFormatter, new()
{
public T getInstance()
{
@ -38,7 +38,7 @@ namespace lib
public class Conn<T, TInst> where T : IFormatter, new()
where TInst : ISerDes<T>, new()
where TInst : ISerDes<T>, new()
{
public Socket Sock { get { return m_socket; } }
public Stream Stream { get { return m_streamNet; } }
@ -75,7 +75,7 @@ namespace lib
}
catch( System.Xml.XmlException ex )
{
lib.Log.error( $"Outer Exception {ex.Message}" );
log.error( $"Outer Exception {ex.Message}" );
}
return obj;
@ -92,8 +92,8 @@ namespace lib
formatter.Serialize( ms, obj );
//var str = System.Text.Encoding.Default.GetString( mm_buffer, 0, (int)ms.Position );
//lib.Log.info( $"Sent data {str} of length {ms.Position}" );
//lib.Log.info( $"Sent {obj}" );
//log.info( $"Sent data {str} of length {ms.Position}" );
//log.info( $"Sent {obj}" );
byte[] byteSize = BitConverter.GetBytes( (uint)ms.Position );
m_streamNet.Write( byteSize, 0, 4 );
@ -103,7 +103,7 @@ namespace lib
}
catch( Exception e )
{
lib.Log.warn( $"Exception sending obj {obj} of {e}" );
log.warn( $"Exception sending obj {obj} of {e}" );
throw;
}
}

View File

@ -1,95 +1,95 @@
using System;
namespace lib.Net
{
[Serializable]
public class Msg
{
public Msg()
{
}
}
[Serializable]
public class Login
{
public Login( String name, String pass )
{
m_username = name;
m_password = pass;
}
using System;
public readonly String m_username;
public readonly String m_password;
}
[Serializable]
public class LoginResp
{
public LoginResp( bool resp )
{
m_resp = resp;
namespace lib.Net
{
[Serializable]
public class Msg
{
public Msg()
{
}
public readonly bool m_resp;
}
#region Admin Messages
[Serializable]
public class Login
{
public Login( String name, String pass )
{
m_username = name;
m_password = pass;
}
public readonly String m_username;
public readonly String m_password;
}
[Serializable]
public class LoginResp
{
public LoginResp( bool resp )
{
m_resp = resp;
}
public readonly bool m_resp;
}
#region Admin Messages
//Subclasses of this need to be on an admin client.
[Serializable]
public class Admin
[Serializable]
public class Admin
{
};
[Serializable]
public class CreateEntity : Admin
};
[Serializable]
public class CreateEntity: Admin
{
}
[Serializable]
public class MoveEntity : Admin
{
}
#endregion
[Serializable]
public class EntityBase
{
public EntityBase( int id )
{
m_id = id;
[Serializable]
public class MoveEntity: Admin
{
}
#endregion
[Serializable]
public class EntityBase
{
public EntityBase( int id )
{
m_id = id;
}
public readonly int m_id;
};
[Serializable]
public class EntityPos : EntityBase
{
public EntityPos( int id, float x, float y, float z ) :
base( id )
{
m_x = x;
m_y = y;
m_z = z;
public readonly int m_id;
};
[Serializable]
public class EntityPos: EntityBase
{
public EntityPos( int id, float x, float y, float z ) :
base( id )
{
m_x = x;
m_y = y;
m_z = z;
}
public readonly float m_x;
public readonly float m_y;
public readonly float m_z;
}
[Serializable]
public class EntityDesc : EntityBase
{
public EntityDesc( int id ) :
base( id )
{
public readonly float m_x;
public readonly float m_y;
public readonly float m_z;
}
[Serializable]
public class EntityDesc: EntityBase
{
public EntityDesc( int id ) :
base( id )
{
}
//Should an entity have a mesh? Be made up of multiple meshes?
@ -100,4 +100,4 @@ namespace lib.Net
}
}

View File

@ -14,7 +14,7 @@ using System.Threading.Tasks;
static public class scr
static public class refl
{
public class PredEnumerator
@ -30,7 +30,7 @@ static public class scr
}
}
public class PredEnumerator<T> : PredEnumerator, IEnumerator<T>
public class PredEnumerator<T>: PredEnumerator, IEnumerator<T>
{
public T Current => m_en.Current;
@ -100,12 +100,12 @@ static public class scr
}
#endregion
IEnumerator<T> m_en;
Predicate<T> m_pred;
IEnumerator<T> m_en;
Predicate<T> m_pred;
}
public class PredEnumerable<T> : IEnumerable<T>
public class PredEnumerable<T>: IEnumerable<T>
{
public PredEnumerable( PredEnumerator<T> en )
{
@ -132,7 +132,7 @@ static public class scr
BindingFlags.DeclaredOnly |
BindingFlags.NonPublic |
BindingFlags.Public |
BindingFlags.Instance);
BindingFlags.Instance );
var en = PredEnumerator.Create<FieldInfo>( fieldArr.AsEnumerable<FieldInfo>(), fa => fa.GetCustomAttribute( typeof( NonSerializedAttribute ) ) == null );
@ -167,13 +167,13 @@ static public class scr
var propArr = t.GetProperties(
BindingFlags.DeclaredOnly |
BindingFlags.NonPublic |
BindingFlags.Public |
BindingFlags.Public |
BindingFlags.Instance
);
var en = PredEnumerator.Create<PropertyInfo>( propArr.AsEnumerable<PropertyInfo>(),
var en = PredEnumerator.Create<PropertyInfo>( propArr.AsEnumerable<PropertyInfo>(),
fa => fa.GetCustomAttribute( typeof( NonSerializedAttribute ) ) == null && !list.Exists( f => f.Name == fa.Name ) );
list.AddRange( new PredEnumerable<PropertyInfo>( en ) );

View File

@ -1,8 +1,8 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//using System.Threading.Tasks;
using System.Text;
//using System.Threading.Tasks;
using System.Diagnostics;
using System.Reflection;
using System.Collections.Immutable;
@ -16,11 +16,11 @@ namespace res
[Serializable]
public class Ref : lib.I_Serialize
public class Ref: lib.I_Serialize
{
public string filename { get { return m_filename; } }
//For construction
public string filename { get { return m_filename; } }
//For construction
public Ref()
{
}
@ -51,11 +51,11 @@ namespace res
}
[Serializable]
public class Ref<T> : Ref where T : class
public class Ref<T>: Ref where T : class
{
public T res => m_res != null ? m_res : m_res = Mgr.load<T>( filename );
//For serialization
public T res => m_res != null ? m_res : m_res = Mgr.load<T>( filename );
//For serialization
public Ref()
{
}
@ -88,9 +88,9 @@ namespace res
{
static public Mgr mgr;
}
}
/*
public class Loader<T>
{
@ -100,8 +100,8 @@ namespace res
return default(T);
}
}
*/
*/
public delegate T Load<out T>( string filename );
@ -114,7 +114,7 @@ namespace res
}
class LoadHolder<T> : LoadHolder
class LoadHolder<T>: LoadHolder
{
public LoadHolder( Load<T> _dlgtLoad )
{
@ -128,9 +128,9 @@ namespace res
{
return load();
}
}
//generic classes make a new static per generic type
}
//generic classes make a new static per generic type
class ResCache<T> where T : class
{
public static T s_default = default;
@ -157,10 +157,10 @@ namespace res
var lh = new LoadHolder<T>( loader );
ImmutableInterlocked.TryAdd( ref Resource.mgr.m_loaders, typeof( T ), lh );
}
//Register all subclasses of a particular type
//???? Should we just always do this?
}
//Register all subclasses of a particular type
//???? Should we just always do this?
static public void registerSub( Type baseType )
{
@ -201,7 +201,7 @@ namespace res
static public Ref<T> lookup<T>( string filename ) where T : class
{
{
/*
LoadHolder loader_gen;
Resource.mgr.m_loaders.TryGetValue( typeof( T ), out loader_gen );
@ -214,14 +214,14 @@ namespace res
Ref<T> rf = rf_raw as Ref<T>;
return rf;
}
*/
*/
return new Ref<T>( filename );
}
//*
}
//*
static public Ref lookup( string filename, Type t )
{
{
/*
LoadHolder loader_gen;
Resource.mgr.m_loaders.TryGetValue( t, out loader_gen );
@ -234,12 +234,12 @@ namespace res
var rf_raw = loaderHolder.load( filename );
return rf_raw;
}
*/
*/
return new Ref( filename );
}
//*/
}
//*/
static public T load<T>( string filename ) where T : class
{
if( ResCache<T>.s_cache.TryGetValue( filename, out var wr ) )
@ -247,10 +247,10 @@ namespace res
if( wr.TryGetTarget( out var v ) )
return v;
lib.Log.info( $"{filename} was in cache, but its been dropped, reloading." );
log.info( $"{filename} was in cache, but its been dropped, reloading." );
}
lib.Log.warn( $"Block Loading {filename}." );
log.warn( $"Block Loading {filename}." );
var newV = actualLoad<T>( filename );
@ -268,7 +268,7 @@ namespace res
if( wr.TryGetTarget( out var v ) )
return v;
lib.Log.error( $"{filename} was in cache, but its been dropped, reloading." );
log.error( $"{filename} was in cache, but its been dropped, reloading." );
}
}
@ -286,24 +286,24 @@ namespace res
var alreadyAdded = !ImmutableInterlocked.TryAdd( ref ResCache<T>.s_cache, filename, weak );
evtNew.Set();
//Done loading
evtNew.Set();
//Done loading
if( !ImmutableInterlocked.TryRemove( ref s_loading, filename, out var oldEvt ) )
{
lib.Log.error( $"Error removing loading event for {filename}" );
log.error( $"Error removing loading event for {filename}" );
}
if( alreadyAdded )
{
lib.Log.error( $"Key {filename} already existed, though it shouldnt." );
log.error( $"Key {filename} already existed, though it shouldnt." );
}
return v;
}
else
{
lib.Log.error( $"Loader could not be found for type {typeof( T )}" );
log.error( $"Loader could not be found for type {typeof( T )}" );
return ResCache<T>.s_default;
}

View File

@ -1,25 +1,25 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
using System.Xml;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Security.Permissions;
namespace lib
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
using System.Xml;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Security.Permissions;
namespace lib
{
[Serializable]
public class SerializableDictionary<TKey, TVal> : Dictionary<TKey, TVal>, IXmlSerializable, ISerializable
public class SerializableDictionary<TKey, TVal>: Dictionary<TKey, TVal>, IXmlSerializable, ISerializable
{
#region Constants
#region Constants
private const string DictionaryNodeName = "Dictionary";
private const string ItemNodeName = "Item";
private const string KeyNodeName = "Key";
private const string ValueNodeName = "Value";
#endregion
#region Constructors
#endregion
#region Constructors
public SerializableDictionary()
{
}
@ -49,8 +49,8 @@ namespace lib
{
}
#endregion
#region ISerializable Members
#endregion
#region ISerializable Members
protected SerializableDictionary( SerializationInfo info, StreamingContext context )
{
@ -74,8 +74,8 @@ namespace lib
}
}
#endregion
#region IXmlSerializable Members
#endregion
#region IXmlSerializable Members
void IXmlSerializable.WriteXml( System.Xml.XmlWriter writer )
{
@ -131,8 +131,8 @@ namespace lib
return null;
}
#endregion
#region Private Properties
#endregion
#region Private Properties
protected XmlSerializer ValueSerializer
{
get
@ -156,10 +156,10 @@ namespace lib
return keySerializer;
}
}
#endregion
#region Private Members
#endregion
#region Private Members
private XmlSerializer keySerializer = null;
private XmlSerializer valueSerializer = null;
#endregion
}
}
#endregion
}
}

View File

@ -12,7 +12,7 @@ namespace lib
/// <summary>
///
/// </summary>
public class VersionFormatter : IFormatter
public class VersionFormatter: IFormatter
{
public enum ETypes
{
@ -160,44 +160,44 @@ namespace lib
switch( typeName )
{
case "Int32":
writer.Write( (char)ETypes.Int32 );
writer.Write( name.GetHashCode() );
writer.Write( (char)ETypes.Int32 );
writer.Write( name.GetHashCode() );
write( writer, Convert.ToInt32( fi.GetValue( parentObj ) ) );
break;
write( writer, Convert.ToInt32( fi.GetValue( parentObj ) ) );
break;
case "Single":
writer.Write( (char)ETypes.Single );
writer.Write( name.GetHashCode() );
writer.Write( (char)ETypes.Single );
writer.Write( name.GetHashCode() );
write( writer, Convert.ToSingle( fi.GetValue( parentObj ) ) );
break;
write( writer, Convert.ToSingle( fi.GetValue( parentObj ) ) );
break;
case "Double":
writer.Write( (char)ETypes.Double );
writer.Write( name.GetHashCode() );
writer.Write( (char)ETypes.Double );
writer.Write( name.GetHashCode() );
write( writer, Convert.ToDouble( fi.GetValue( parentObj ) ) );
break;
write( writer, Convert.ToDouble( fi.GetValue( parentObj ) ) );
break;
case "Char":
writer.Write( (char)ETypes.Char );
writer.Write( name.GetHashCode() );
writer.Write( (char)ETypes.Char );
writer.Write( name.GetHashCode() );
write( writer, Convert.ToChar( fi.GetValue( parentObj ) ) );
break;
write( writer, Convert.ToChar( fi.GetValue( parentObj ) ) );
break;
case "String":
writer.Write( (char)ETypes.String );
writer.Write( name.GetHashCode() );
writer.Write( (char)ETypes.String );
writer.Write( name.GetHashCode() );
write( writer, Convert.ToString( fi.GetValue( parentObj ) ) );
break;
write( writer, Convert.ToString( fi.GetValue( parentObj ) ) );
break;
case "Boolean":
writer.Write( (char)ETypes.Boolean );
writer.Write( name.GetHashCode() );
writer.Write( (char)ETypes.Boolean );
writer.Write( name.GetHashCode() );
writer.Write( Convert.ToBoolean( fi.GetValue( parentObj ) ) );
break;
writer.Write( Convert.ToBoolean( fi.GetValue( parentObj ) ) );
break;
default:
Console.WriteLine( "VersionFormatter does not understand type " + typeName );
break;
Console.WriteLine( "VersionFormatter does not understand type " + typeName );
break;
}
}
}
@ -433,35 +433,35 @@ namespace lib
switch( type )
{
case ETypes.Array:
readArray( reader, obj, fi );
break;
readArray( reader, obj, fi );
break;
case ETypes.Int32:
readInt( reader, obj, fi );
break;
readInt( reader, obj, fi );
break;
case ETypes.Single:
readSingle( reader, obj, fi );
break;
readSingle( reader, obj, fi );
break;
case ETypes.Double:
readDouble( reader, obj, fi );
break;
readDouble( reader, obj, fi );
break;
case ETypes.Char:
readChar( reader, obj, fi );
break;
readChar( reader, obj, fi );
break;
case ETypes.Boolean:
readBool( reader, obj, fi );
break;
readBool( reader, obj, fi );
break;
case ETypes.String:
readString( reader, obj, fi );
break;
readString( reader, obj, fi );
break;
case ETypes.Ref:
readRef( reader, obj, fi );
break;
readRef( reader, obj, fi );
break;
case ETypes.Object:
readObject( reader );
break;
readObject( reader );
break;
default:
Debug.Fail( "Unknown type on read." );
break;
Debug.Fail( "Unknown type on read." );
break;
}
}
catch( Exception ex )

View File

@ -1,12 +1,12 @@
using System;
using System.IO;
using System.Xml;
using System.Runtime.Serialization;
//using System.Web.Configuration;
using System.Collections;
using System.Collections.Generic;
using System;
using System.IO;
using System.Xml;
using System.Runtime.Serialization;
//using System.Web.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
//using System.Collections;
//using System.Diagnostics;
@ -14,37 +14,37 @@ using System.Reflection;
//using System.ComponentModel;
namespace lib
namespace lib
{
//Old, use 2 now.
class XmlFormatter : IFormatter
{
StreamingContext m_context;
class XmlFormatter: IFormatter
{
StreamingContext m_context;
//SerializationMode m_mode;
//KnownTypeCollection known_types;
//IDataContractSurrogate m_surrogate;
//int m_maxItems;
public XmlFormatter()
{
}
public XmlFormatter()
{
}
/*
public XmlFormatter( SerializationMode mode )
{
m_mode = mode;
}
public XmlFormatter( StreamingContext context )
{
m_context = context;
}
public XmlFormatter( SerializationMode mode,
StreamingContext context )
{
m_mode = mode;
m_context = context;
/*
public XmlFormatter( SerializationMode mode )
{
m_mode = mode;
}
public XmlFormatter( StreamingContext context )
{
m_context = context;
}
public XmlFormatter( SerializationMode mode,
StreamingContext context )
{
m_mode = mode;
m_context = context;
}
*/
@ -54,185 +54,185 @@ namespace lib
//}
SerializationBinder IFormatter.Binder
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
ISurrogateSelector IFormatter.SurrogateSelector
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
public StreamingContext Context
{
get { return m_context; }
set { m_context = value; }
}
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
/*
public KnownTypeCollection KnownTypes {
get { return known_types; }
}
public int MaxItemsInObjectGraph {
get { return m_maxItems; }
set { m_maxItems= value; }
}
ISurrogateSelector IFormatter.SurrogateSelector
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
public StreamingContext Context
{
get { return m_context; }
set { m_context = value; }
}
/*
public KnownTypeCollection KnownTypes {
get { return known_types; }
}
public int MaxItemsInObjectGraph {
get { return m_maxItems; }
set { m_maxItems= value; }
}
*/
object IFormatter.Deserialize( Stream stream )
{
return Deserialize( stream, null );
}
public object Deserialize( Stream stream, Type type )
{
XmlTextReader reader = new XmlTextReader( stream );
return Deserialize( reader, type );
}
public object Deserialize( XmlReader reader, Type type )
{
return Deserialize( reader, type, false );
}
public object Deserialize( XmlReader reader, Type type, bool readContentOnly )
{
reader.Read();
XmlDocument doc = new XmlDocument();
doc.Load( reader );
return Deserialize( doc.DocumentElement );
}
ConstructorInfo getNoParamCons( ConstructorInfo[] ciArr )
{
foreach( ConstructorInfo ci in ciArr )
{
if( ci.GetParameters().Length == 0 )
{
return ci;
}
}
return null;
}
private static FormatterConverter s_conv = new FormatterConverter();
private Dictionary<int, object> m_alreadySerialized = new Dictionary<int, object>();
public object Deserialize( XmlElement elem )
{
string strType = elem.GetAttribute( "t" );
return Deserialize( elem, strType );
}
public object Deserialize( XmlElement elem, string strType )
{
Type type = Type.GetType( strType );
MemberInfo[] miArr = FormatterServices.GetSerializableMembers( type );
object IFormatter.Deserialize( Stream stream )
{
return Deserialize( stream, null );
}
public object Deserialize( Stream stream, Type type )
{
XmlTextReader reader = new XmlTextReader( stream );
return Deserialize( reader, type );
}
public object Deserialize( XmlReader reader, Type type )
{
return Deserialize( reader, type, false );
}
public object Deserialize( XmlReader reader, Type type, bool readContentOnly )
{
reader.Read();
XmlDocument doc = new XmlDocument();
doc.Load( reader );
return Deserialize( doc.DocumentElement );
}
ConstructorInfo getNoParamCons( ConstructorInfo[] ciArr )
{
foreach( ConstructorInfo ci in ciArr )
{
if( ci.GetParameters().Length == 0 )
{
return ci;
}
}
return null;
}
private static FormatterConverter s_conv = new FormatterConverter();
private Dictionary<int, object> m_alreadySerialized = new Dictionary<int, object>();
public object Deserialize( XmlElement elem )
{
string strType = elem.GetAttribute( "t" );
return Deserialize( elem, strType );
}
public object Deserialize( XmlElement elem, string strType )
{
Type type = Type.GetType( strType );
MemberInfo[] miArr = FormatterServices.GetSerializableMembers( type );
object obj = Activator.CreateInstance( type );
/*
object obj = FormatterServices.GetUninitializedObject( type );
ConstructorInfo[] ciArr = obj.GetType().GetConstructors();
ConstructorInfo ci = getNoParamCons( ciArr );
if( ci == null )
return null;
obj = ci.Invoke( null );
/*
object obj = FormatterServices.GetUninitializedObject( type );
ConstructorInfo[] ciArr = obj.GetType().GetConstructors();
ConstructorInfo ci = getNoParamCons( ciArr );
if( ci == null )
return null;
obj = ci.Invoke( null );
*/
for( int i = 0; i < miArr.Length; ++i )
{
FieldInfo fi = (FieldInfo)miArr[ i ];
XmlNodeList nodeList = elem.GetElementsByTagName( fi.Name );
if( nodeList.Count == 1 )
{
Type t = fi.FieldType;
TypeCode tc = Type.GetTypeCode( t );
XmlElement child = (XmlElement)nodeList[ 0 ];
object childObj = null;
if( tc != TypeCode.Object || fi.FieldType.FullName == "System.String" )
{
childObj = s_conv.Convert( child.GetAttribute( "v" ), fi.FieldType );
}
else
{
if( !t.IsArray )
{
string refStr = child.GetAttribute( "ref" );
int refInt = Convert.ToInt32( refStr );
if( child.HasAttribute( "t" ) )
{
childObj = Deserialize( child );
m_alreadySerialized[refInt] = childObj;
}
else
{
childObj = m_alreadySerialized[refInt];
}
}
else
for( int i = 0; i < miArr.Length; ++i )
{
FieldInfo fi = (FieldInfo)miArr[ i ];
XmlNodeList nodeList = elem.GetElementsByTagName( fi.Name );
if( nodeList.Count == 1 )
{
Type t = fi.FieldType;
TypeCode tc = Type.GetTypeCode( t );
XmlElement child = (XmlElement)nodeList[ 0 ];
object childObj = null;
if( tc != TypeCode.Object || fi.FieldType.FullName == "System.String" )
{
childObj = s_conv.Convert( child.GetAttribute( "v" ), fi.FieldType );
}
else
{
if( !t.IsArray )
{
string refStr = child.GetAttribute( "ref" );
int refInt = Convert.ToInt32( refStr );
if( child.HasAttribute( "t" ) )
{
childObj = Deserialize( child );
m_alreadySerialized[refInt] = childObj;
}
else
{
childObj = m_alreadySerialized[refInt];
}
}
else
{
//FormatterServices.GetUninitializedObject()
int length = s_conv.ToInt32( child.GetAttribute( "c" ) );
string elemType = child.GetAttribute( "t" );
Array arr = Array.CreateInstance( t.GetElementType(), length );
XmlNodeList arrNodeList = child.ChildNodes;
for( int iElems = 0; iElems < arr.Length; ++iElems )
{
XmlElement arrElem = (XmlElement)arrNodeList.Item( iElems );
arr.SetValue( Deserialize( arrElem, elemType ), iElems );
}
}
}
fi.SetValue( obj, childObj );
}
else
{
if( nodeList.Count == 0 )
int length = s_conv.ToInt32( child.GetAttribute( "c" ) );
string elemType = child.GetAttribute( "t" );
Array arr = Array.CreateInstance( t.GetElementType(), length );
XmlNodeList arrNodeList = child.ChildNodes;
for( int iElems = 0; iElems < arr.Length; ++iElems )
{
XmlElement arrElem = (XmlElement)arrNodeList.Item( iElems );
arr.SetValue( Deserialize( arrElem, elemType ), iElems );
}
}
}
fi.SetValue( obj, childObj );
}
else
{
if( nodeList.Count == 0 )
{
// Should be
//object obj2 = fi.GetRawConstantValue();
}
}
else //More than 1.
{
//Log.error( "Too many fields named the same thing" );
}
}
//log.error( "Too many fields named the same thing" );
}
}
}
//FieldInfo fi = (FieldInfo)miArr[0];
@ -241,144 +241,144 @@ namespace lib
//ci.Invoke( null );
return obj;
return obj;
}
/*
public T Deserialize<T> (Stream stream)
{
return (T) Deserialize (XmlReader.Create (stream), typeof (T));
}
public T Deserialize<T> (XmlReader reader)
{
return (T) Deserialize (reader, typeof (T), false);
}
public T Deserialize<T> (XmlReader reader, bool readContentOnly)
{
return (T) Deserialize (reader, typeof (T), readContentOnly);
}
/*
public T Deserialize<T> (Stream stream)
{
return (T) Deserialize (XmlReader.Create (stream), typeof (T));
}
public T Deserialize<T> (XmlReader reader)
{
return (T) Deserialize (reader, typeof (T), false);
}
public T Deserialize<T> (XmlReader reader, bool readContentOnly)
{
return (T) Deserialize (reader, typeof (T), readContentOnly);
}
*/
public void Serialize( Stream stream, object graph )
public void Serialize( Stream stream, object graph )
{
/*
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
Serialize( XmlWriter.Create( stream, settings ), graph );
/*
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
Serialize( XmlWriter.Create( stream, settings ), graph );
*/
XmlTextWriter writer = new XmlTextWriter( stream, null );
writer.Formatting = Formatting.Indented;
Serialize( writer, graph );
writer.Close();
}
public void Serialize( XmlWriter writer, object graph )
{
Serialize( writer, graph, null, true, false, true );
}
public void Serialize( XmlWriter writer, object graph,
Type rootType, bool preserveObjectReferences,
bool writeContentOnly,
bool ignoreUnknownSerializationData )
{
XmlTextWriter writer = new XmlTextWriter( stream, null );
writer.Formatting = Formatting.Indented;
Serialize( writer, graph );
writer.Close();
}
public void Serialize( XmlWriter writer, object graph )
{
Serialize( writer, graph, null, true, false, true );
}
public void Serialize( XmlWriter writer, object graph,
Type rootType, bool preserveObjectReferences,
bool writeContentOnly,
bool ignoreUnknownSerializationData )
{
Type t = graph.GetType();
//writer.WriteStartDocument();
if( Type.GetTypeCode( t ) == TypeCode.Object )
{
writer.WriteStartElement( "root" );
Assembly assem = t.Assembly;
string assemName = assem.GetName().Name;
writer.WriteAttributeString( "t", graph.GetType().FullName + ", " + assemName );
FieldInfo[] fiArr = t.GetFields( BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.DeclaredOnly );
foreach( FieldInfo fi in fiArr )
{
if( Type.GetTypeCode( t ) == TypeCode.Object )
{
writer.WriteStartElement( "root" );
Assembly assem = t.Assembly;
string assemName = assem.GetName().Name;
writer.WriteAttributeString( "t", graph.GetType().FullName + ", " + assemName );
FieldInfo[] fiArr = t.GetFields( BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.DeclaredOnly );
foreach( FieldInfo fi in fiArr )
{
Serialize( writer, fi.Name, fi.GetValue( graph ) );
/*
if( fi.FieldType.IsClass )
{
Serialize( writer, fi.GetValue( graph ), rootType, preserveObjectReferences, writeContentOnly, ignoreUnknownSerializationData );
}
else
{
SerializePod( writer, fi.GetValue( graph ) );
}
/*
if( fi.FieldType.IsClass )
{
Serialize( writer, fi.GetValue( graph ), rootType, preserveObjectReferences, writeContentOnly, ignoreUnknownSerializationData );
}
else
{
SerializePod( writer, fi.GetValue( graph ) );
}
*/
}
writer.WriteEndElement();
}
writer.WriteEndElement();
}
//writer.WriteEndDocument();
}
private ObjectIDGenerator m_idGenerator = new ObjectIDGenerator();
private Dictionary<long, object> m_alreadyDeserialzied = new Dictionary<long, object>();
public void Serialize( XmlWriter writer, string name, object obj )
{
writer.WriteStartElement( name );
if( obj != null )
{
Type t = obj.GetType();
if( Type.GetTypeCode( t ) == TypeCode.Object )
{
bool first = false;
if( !m_alreadyDeserialzied.ContainsKey( m_idGenerator.GetId( obj, out first ) ) )
{
m_alreadyDeserialzied[m_idGenerator.GetId( obj, out first )] = obj;
Assembly assem = t.Assembly;
string assemName = assem.GetName().Name;
if( !t.IsArray )
{
writer.WriteAttributeString( "t", t.FullName + ", " + assemName );
writer.WriteAttributeString( "ref", m_idGenerator.GetId( obj, out first ).ToString() );
FieldInfo[] fiArr = t.GetFields( BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public );
foreach( FieldInfo fi in fiArr )
{
Serialize( writer, fi.Name, fi.GetValue( obj ) );
}
}
else
{
Array arr = (Array)obj;
Type aType = t.GetElementType();
string aTypeString = aType.FullName;
writer.WriteAttributeString( "t", aTypeString + ", " + assemName );
writer.WriteAttributeString( "c", arr.Length.ToString() );
for( int i = 0; i < arr.Length; ++i )
{
Serialize( writer, "val", arr.GetValue( i ) );
}
private ObjectIDGenerator m_idGenerator = new ObjectIDGenerator();
private Dictionary<long, object> m_alreadyDeserialzied = new Dictionary<long, object>();
public void Serialize( XmlWriter writer, string name, object obj )
{
writer.WriteStartElement( name );
if( obj != null )
{
Type t = obj.GetType();
if( Type.GetTypeCode( t ) == TypeCode.Object )
{
bool first = false;
if( !m_alreadyDeserialzied.ContainsKey( m_idGenerator.GetId( obj, out first ) ) )
{
m_alreadyDeserialzied[m_idGenerator.GetId( obj, out first )] = obj;
Assembly assem = t.Assembly;
string assemName = assem.GetName().Name;
if( !t.IsArray )
{
writer.WriteAttributeString( "t", t.FullName + ", " + assemName );
writer.WriteAttributeString( "ref", m_idGenerator.GetId( obj, out first ).ToString() );
FieldInfo[] fiArr = t.GetFields( BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public );
foreach( FieldInfo fi in fiArr )
{
Serialize( writer, fi.Name, fi.GetValue( obj ) );
}
}
else
{
Array arr = (Array)obj;
Type aType = t.GetElementType();
string aTypeString = aType.FullName;
writer.WriteAttributeString( "t", aTypeString + ", " + assemName );
writer.WriteAttributeString( "c", arr.Length.ToString() );
for( int i = 0; i < arr.Length; ++i )
{
Serialize( writer, "val", arr.GetValue( i ) );
}
//writer.WriteStartElement( "values" );
@ -387,29 +387,29 @@ namespace lib
//writer.WriteEndElement();
}
}
else
{
writer.WriteAttributeString( "ref", m_idGenerator.GetId( obj, out first ).ToString() );
}
}
else
{
writer.WriteAttributeString( "t", t.FullName );
writer.WriteAttributeString( "v", obj.ToString() );
}
}
else
{
writer.WriteAttributeString( "null", "" );
}
writer.WriteEndElement();
}
}
}
}
else
{
writer.WriteAttributeString( "ref", m_idGenerator.GetId( obj, out first ).ToString() );
}
}
else
{
writer.WriteAttributeString( "t", t.FullName );
writer.WriteAttributeString( "v", obj.ToString() );
}
}
else
{
writer.WriteAttributeString( "null", "" );
}
writer.WriteEndElement();
}
}
}

View File

@ -29,12 +29,12 @@ namespace lib
}
public class XmlFormatter2Cfg : Config
public class XmlFormatter2Cfg: Config
{
public readonly Datastructure datastructure = Datastructure.Full;
}
public class XmlFormatter2 : IFormatter
public class XmlFormatter2: IFormatter
{
public StreamingContext Context { get; set; }
@ -95,10 +95,10 @@ namespace lib
{
//lib.log.info( "DeserializeKnownType( Stream stream, Type t ) {0} {1}", m_rndVal, m_alreadySerialized.Count );
XmlTextReader reader = new XmlTextReader( stream );
XmlTextReader reader = new XmlTextReader(stream);
//reader.Settings = System.Text.Encoding.ASCII;
object obj = Deserialize( reader, t );
object obj = Deserialize(reader, t);
//lib.log.info( "DeserializeKnownType END( Stream stream, Type t ) {0} {1}", m_rndVal, m_alreadySerialized.Count );
return obj;
}
@ -128,7 +128,7 @@ namespace lib
{
//lib.log.info( "object Deserialize( XmlElement elem ) {0} {1}", m_rndVal, m_alreadySerialized.Count );
string typename = elem.HasAttribute( "t" ) ? elem.GetAttribute( "t" ) : elem.Name;
string typename = elem.HasAttribute("t") ? elem.GetAttribute("t") : elem.Name;
return Deserialize( elem, typename );
}
@ -160,7 +160,7 @@ namespace lib
private object Deserialize( XmlElement elem, Type type, object enclosing = null )
{
TypeCode typeCode = Type.GetTypeCode( type );
TypeCode typeCode = Type.GetTypeCode(type);
if( typeCode != TypeCode.Object )
{
@ -170,7 +170,7 @@ namespace lib
{
if( !type.IsArray )
{
object obj = DeserializeObject( elem, type );
object obj = DeserializeObject(elem, type);
if( obj is I_Serialize )
{
@ -193,7 +193,7 @@ namespace lib
{
mm_types[0] = t;
var fn = GetType().GetMethod( "GetDefaultGeneric" ).MakeGenericMethod( mm_types );
var fn = GetType().GetMethod("GetDefaultGeneric").MakeGenericMethod(mm_types);
return fn.Invoke( this, null );
}
@ -205,7 +205,7 @@ namespace lib
private object DeserializeConcrete( XmlElement elem, Type type )
{
string val = elem.GetAttribute( "v" );
string val = elem.GetAttribute("v");
if( !type.IsEnum )
{
@ -244,7 +244,7 @@ namespace lib
foreach( Assembly a in ass )
{
Type t = a.GetType( shortname );
Type t = a.GetType(shortname);
if( t != null )
{
@ -255,25 +255,25 @@ namespace lib
return null;
}
private Type[] mm_consType = new Type[ 2 ];
private object[] mm_args = new object[ 2 ];
private Type[] mm_consType = new Type[2];
private object[] mm_args = new object[2];
private object DeserializeObject( XmlElement elem, Type type )
{
string refString = elem.GetAttribute( "ref" );
string refString = elem.GetAttribute("ref");
int refInt = refString.Length > 0 ? Convert.ToInt32( refString ) : -1;
int refInt = refString.Length > 0 ? Convert.ToInt32(refString) : -1;
var finalType = type;
if( elem.HasAttribute( "t" ) )
{
var typename = elem.GetAttribute( "t" );
var typename = elem.GetAttribute("t");
finalType = FindType( typename );
if( finalType == null )
finalType = type;
}
object obj = createObject( finalType, refInt );
object obj = createObject(finalType, refInt);
if( obj is IList )
{
@ -282,7 +282,7 @@ namespace lib
return DeserializeList( elem, type, list );
}
Type typeISerializable = typeof( ISerializable );
Type typeISerializable = typeof(ISerializable);
if( obj is ISerializable ) // type.IsSubclassOf( typeISerializable ) )
{
@ -290,7 +290,7 @@ namespace lib
//ISerializable ser = obj as ISerializable;
var serInfo = new SerializationInfo( finalType, new FormatterConverter() );
var serInfo = new SerializationInfo(finalType, new FormatterConverter());
//var serInfoForTypes = new SerializationInfo( type, new FormatterConverter() );
@ -302,13 +302,13 @@ namespace lib
String name = node.Name;
String childType = node.GetAttribute( "t" );
String childType = node.GetAttribute("t");
name = scr.TypeToIdentifier( name );
name = refl.TypeToIdentifier( name );
XmlElement childElem = getNamedChild( allChildren, name );
XmlElement childElem = getNamedChild(allChildren, name);
var des = Deserialize( childElem, childType );
var des = Deserialize(childElem, childType);
serInfo.AddValue( name, des, des.GetType() );
}
@ -323,7 +323,7 @@ namespace lib
mm_consType[0] = typeof( SerializationInfo );
mm_consType[1] = typeof( StreamingContext );
ConstructorInfo serCons = finalType.GetConstructor( BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, mm_consType, null );
ConstructorInfo serCons = finalType.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, mm_consType, null);
mm_args[0] = serInfo;
mm_args[1] = Context;
@ -343,7 +343,7 @@ namespace lib
{
String name = serMember.Name;
name = scr.TypeToIdentifier( name );
name = refl.TypeToIdentifier( name );
XmlElement childElem = getNamedChild( allChildren, name );
@ -355,7 +355,7 @@ namespace lib
{
XmlNodeList allChildren = elem.ChildNodes;
var fields = scr.GetAllFields( type );
var fields = refl.GetAllFields(type);
//MemberInfo[] miArr = FormatterServices.GetSerializableMembers( type, Context );
@ -364,20 +364,20 @@ namespace lib
String name = childFi.Name;
name = scr.TypeToIdentifier( name );
name = refl.TypeToIdentifier( name );
XmlElement childElem = getNamedChild( allChildren, name );
XmlElement childElem = getNamedChild(allChildren, name);
if( childElem != null )
{
object childObj = Deserialize( childElem, childFi.FieldType, obj );
object childObj = Deserialize(childElem, childFi.FieldType, obj);
childFi.SetValue( obj, childObj );
}
else if( fields.Count == 1 )
{
object childObj = Deserialize( elem, childFi.FieldType, obj );
object childObj = Deserialize(elem, childFi.FieldType, obj);
childFi.SetValue( obj, childObj );
}
@ -403,7 +403,7 @@ namespace lib
{
if( arrNodeList.Item( i ) is XmlElement )
{
XmlElement arrElem = (XmlElement)arrNodeList.Item( i );
XmlElement arrElem = (XmlElement)arrNodeList.Item(i);
list.Add( Deserialize( arrElem, genT[0] ) );
}
@ -416,20 +416,20 @@ namespace lib
{
Type typeElem = type.GetElementType();
string refString = elem.GetAttribute( "ref" );
int refInt = refString.Length > 0 ? Convert.ToInt32( refString ) : -1;
string refString = elem.GetAttribute("ref");
int refInt = refString.Length > 0 ? Convert.ToInt32(refString) : -1;
XmlNodeList arrNodeList = elem.ChildNodes;
int length = arrNodeList.Count;
Array arr = createArray( typeElem, refInt, length );
Array arr = createArray(typeElem, refInt, length);
for( int i = 0; i < arr.Length; ++i )
{
if( arrNodeList.Item( i ) is XmlElement )
{
XmlElement arrElem = (XmlElement)arrNodeList.Item( i );
XmlElement arrElem = (XmlElement)arrNodeList.Item(i);
arr.SetValue( Deserialize( arrElem, typeElem ), i );
}
@ -440,14 +440,14 @@ namespace lib
private object createObject( string typename, int refInt )
{
Type type = Type.GetType( typename );
Type type = Type.GetType(typename);
return createObject( type, refInt );
}
private object createObject( Type type, int refInt )
{
TypeCode tc = Type.GetTypeCode( type );
TypeCode tc = Type.GetTypeCode(type);
if( m_cfg.datastructure == Datastructure.Full && refInt > 0 && m_alreadySerialized.ContainsKey( refInt ) )
{
@ -472,14 +472,14 @@ namespace lib
}
catch( Exception exInner )
{
lib.Log.error( $"Got exception {exInner.Message} trying to make an uninitialized object" );
log.error( $"Got exception {exInner.Message} trying to make an uninitialized object" );
}
}
if( obj == null )
{
lib.Log.warn( $"Could not create object of type {type.Name}" );
log.warn( $"Could not create object of type {type.Name}" );
return obj;
}
@ -495,14 +495,14 @@ namespace lib
private Array createArray( string elemTypename, int refInt, int length )
{
Type elemType = Type.GetType( elemTypename );
Type elemType = Type.GetType(elemTypename);
return createArray( elemType, refInt, length );
}
private Array createArray( Type elemType, int refInt, int length )
{
TypeCode elemTC = Type.GetTypeCode( elemType );
TypeCode elemTC = Type.GetTypeCode(elemType);
if( m_cfg.datastructure == Datastructure.Full && refInt > 0 && m_alreadySerialized.ContainsKey( refInt ) )
{
@ -510,7 +510,7 @@ namespace lib
}
else
{
Array arr = Array.CreateInstance( elemType, length ) ;
Array arr = Array.CreateInstance(elemType, length);
if( m_cfg.datastructure == Datastructure.Full )
{
@ -545,7 +545,7 @@ namespace lib
m_alreadySerialized.Clear();
m_objectID = new ObjectIDGenerator();
XmlTextWriter writer = new XmlTextWriter( stream, System.Text.Encoding.ASCII );
XmlTextWriter writer = new XmlTextWriter(stream, System.Text.Encoding.ASCII);
writer.Formatting = Formatting.Indented;
@ -573,7 +573,7 @@ namespace lib
{
Type type = root.GetType();
TypeCode typeCode = Type.GetTypeCode( type );
TypeCode typeCode = Type.GetTypeCode(type);
if( typeCode != TypeCode.Object )
{
@ -626,7 +626,7 @@ namespace lib
bool first;
long refInt = m_objectID.GetId( root, out first );
long refInt = m_objectID.GetId(root, out first);
if( m_cfg.datastructure == Datastructure.Full )
{
@ -644,13 +644,13 @@ namespace lib
Type type = root.GetType();
//*
Type typeISerializable = typeof( ISerializable );
Type typeISerializable = typeof(ISerializable);
if( root is ISerializable ) // type.IsSubclassOf( typeISerializable ) )
{
ISerializable ser = root as ISerializable;
var serInfo = new SerializationInfo( type, new FormatterConverter() );
var serInfo = new SerializationInfo(type, new FormatterConverter());
ser.GetObjectData( serInfo, Context );
@ -660,7 +660,7 @@ namespace lib
{
String name = serMember.Name;
name = scr.TypeToIdentifier( name );
name = refl.TypeToIdentifier( name );
Serialize( writer, serMember.Value, name, true );
}
@ -672,14 +672,14 @@ namespace lib
else
//*/
{
var fields = scr.GetAllFields( type );
var fields = refl.GetAllFields(type);
//MemberInfo[] miArr = FormatterServices.GetSerializableMembers( type, Context );
foreach( var childFi in fields )
{
object[] objs = childFi.GetCustomAttributes( typeof( NonSerializedAttribute ), true );
object[] objs = childFi.GetCustomAttributes(typeof(NonSerializedAttribute), true);
if( objs.Length > 0 )
{
@ -688,7 +688,7 @@ namespace lib
String name = childFi.Name;
name = scr.TypeToIdentifier( name );
name = refl.TypeToIdentifier( name );
Serialize( writer, childFi.GetValue( root ), name, false );
}
@ -708,7 +708,7 @@ namespace lib
bool first;
long refInt = m_objectID.GetId( root, out first );
long refInt = m_objectID.GetId(root, out first);
if( m_cfg.datastructure == Datastructure.Full )
{

View File

@ -6,7 +6,7 @@ using System.Threading;
namespace lib
{
public class MicroStopwatch : System.Diagnostics.Stopwatch
public class MicroStopwatch: System.Diagnostics.Stopwatch
{
readonly double _microSecPerTick
= 1000000D / System.Diagnostics.Stopwatch.Frequency;
@ -189,7 +189,7 @@ namespace lib
/// <summary>
/// MicroTimer Event Argument class
/// </summary>
public class MicroTimerEventArgs : EventArgs
public class MicroTimerEventArgs: EventArgs
{
// Simple counter, number times timed event (callback function) executed
public int TimerCount { get; private set; }