mirror of
https://github.com/ChronosX88/mta-mono.git
synced 2024-11-22 02:02:23 +00:00
Немного рефакторинга
This commit is contained in:
parent
43014102fc
commit
c2a5429975
63
.gitattributes
vendored
Normal file
63
.gitattributes
vendored
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
###############################################################################
|
||||||
|
# Set default behavior to automatically normalize line endings.
|
||||||
|
###############################################################################
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Set default behavior for command prompt diff.
|
||||||
|
#
|
||||||
|
# This is need for earlier builds of msysgit that does not have it on by
|
||||||
|
# default for csharp files.
|
||||||
|
# Note: This is only used by command line
|
||||||
|
###############################################################################
|
||||||
|
#*.cs diff=csharp
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Set the merge driver for project and solution files
|
||||||
|
#
|
||||||
|
# Merging from the command prompt will add diff markers to the files if there
|
||||||
|
# are conflicts (Merging from VS is not affected by the settings below, in VS
|
||||||
|
# the diff markers are never inserted). Diff markers may cause the following
|
||||||
|
# file extensions to fail to load in VS. An alternative would be to treat
|
||||||
|
# these files as binary and thus will always conflict and require user
|
||||||
|
# intervention with every merge. To do so, just uncomment the entries below
|
||||||
|
###############################################################################
|
||||||
|
#*.sln merge=binary
|
||||||
|
#*.csproj merge=binary
|
||||||
|
#*.vbproj merge=binary
|
||||||
|
#*.vcxproj merge=binary
|
||||||
|
#*.vcproj merge=binary
|
||||||
|
#*.dbproj merge=binary
|
||||||
|
#*.fsproj merge=binary
|
||||||
|
#*.lsproj merge=binary
|
||||||
|
#*.wixproj merge=binary
|
||||||
|
#*.modelproj merge=binary
|
||||||
|
#*.sqlproj merge=binary
|
||||||
|
#*.wwaproj merge=binary
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# behavior for image files
|
||||||
|
#
|
||||||
|
# image files are treated as binary by default.
|
||||||
|
###############################################################################
|
||||||
|
#*.jpg binary
|
||||||
|
#*.png binary
|
||||||
|
#*.gif binary
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# diff behavior for common document formats
|
||||||
|
#
|
||||||
|
# Convert binary document formats to text before diffing them. This feature
|
||||||
|
# is only available from the command line. Turn it on by uncommenting the
|
||||||
|
# entries below.
|
||||||
|
###############################################################################
|
||||||
|
#*.doc diff=astextplain
|
||||||
|
#*.DOC diff=astextplain
|
||||||
|
#*.docx diff=astextplain
|
||||||
|
#*.DOCX diff=astextplain
|
||||||
|
#*.dot diff=astextplain
|
||||||
|
#*.DOT diff=astextplain
|
||||||
|
#*.pdf diff=astextplain
|
||||||
|
#*.PDF diff=astextplain
|
||||||
|
#*.rtf diff=astextplain
|
||||||
|
#*.RTF diff=astextplain
|
156
.gitignore
vendored
Normal file
156
.gitignore
vendored
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
|
## files generated by popular Visual Studio add-ons.
|
||||||
|
|
||||||
|
# User-specific files
|
||||||
|
*.suo
|
||||||
|
*.user
|
||||||
|
*.sln.docstates
|
||||||
|
|
||||||
|
# Build results
|
||||||
|
|
||||||
|
[Dd]ebug/
|
||||||
|
[Rr]elease/
|
||||||
|
x64/
|
||||||
|
build/
|
||||||
|
[Bb]in/
|
||||||
|
[Oo]bj/
|
||||||
|
|
||||||
|
# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets
|
||||||
|
!packages/*/build/
|
||||||
|
|
||||||
|
# MSTest test Results
|
||||||
|
[Tt]est[Rr]esult*/
|
||||||
|
[Bb]uild[Ll]og.*
|
||||||
|
|
||||||
|
*_i.c
|
||||||
|
*_p.c
|
||||||
|
*.ilk
|
||||||
|
*.meta
|
||||||
|
*.obj
|
||||||
|
*.pch
|
||||||
|
*.pdb
|
||||||
|
*.pgc
|
||||||
|
*.pgd
|
||||||
|
*.rsp
|
||||||
|
*.sbr
|
||||||
|
*.tlb
|
||||||
|
*.tli
|
||||||
|
*.tlh
|
||||||
|
*.tmp
|
||||||
|
*.tmp_proj
|
||||||
|
*.log
|
||||||
|
*.vspscc
|
||||||
|
*.vssscc
|
||||||
|
.builds
|
||||||
|
*.pidb
|
||||||
|
*.log
|
||||||
|
*.scc
|
||||||
|
|
||||||
|
# Visual C++ cache files
|
||||||
|
ipch/
|
||||||
|
*.aps
|
||||||
|
*.ncb
|
||||||
|
*.opensdf
|
||||||
|
*.sdf
|
||||||
|
*.cachefile
|
||||||
|
|
||||||
|
# Visual Studio profiler
|
||||||
|
*.psess
|
||||||
|
*.vsp
|
||||||
|
*.vspx
|
||||||
|
|
||||||
|
# Guidance Automation Toolkit
|
||||||
|
*.gpState
|
||||||
|
|
||||||
|
# ReSharper is a .NET coding add-in
|
||||||
|
_ReSharper*/
|
||||||
|
*.[Rr]e[Ss]harper
|
||||||
|
|
||||||
|
# TeamCity is a build add-in
|
||||||
|
_TeamCity*
|
||||||
|
|
||||||
|
# DotCover is a Code Coverage Tool
|
||||||
|
*.dotCover
|
||||||
|
|
||||||
|
# NCrunch
|
||||||
|
*.ncrunch*
|
||||||
|
.*crunch*.local.xml
|
||||||
|
|
||||||
|
# Installshield output folder
|
||||||
|
[Ee]xpress/
|
||||||
|
|
||||||
|
# DocProject is a documentation generator add-in
|
||||||
|
DocProject/buildhelp/
|
||||||
|
DocProject/Help/*.HxT
|
||||||
|
DocProject/Help/*.HxC
|
||||||
|
DocProject/Help/*.hhc
|
||||||
|
DocProject/Help/*.hhk
|
||||||
|
DocProject/Help/*.hhp
|
||||||
|
DocProject/Help/Html2
|
||||||
|
DocProject/Help/html
|
||||||
|
|
||||||
|
# Click-Once directory
|
||||||
|
publish/
|
||||||
|
|
||||||
|
# Publish Web Output
|
||||||
|
*.Publish.xml
|
||||||
|
|
||||||
|
# NuGet Packages Directory
|
||||||
|
## TODO: If you have NuGet Package Restore enabled, uncomment the next line
|
||||||
|
#packages/
|
||||||
|
|
||||||
|
# Windows Azure Build Output
|
||||||
|
csx
|
||||||
|
*.build.csdef
|
||||||
|
|
||||||
|
# Windows Store app package directory
|
||||||
|
AppPackages/
|
||||||
|
|
||||||
|
# Others
|
||||||
|
sql/
|
||||||
|
*.Cache
|
||||||
|
ClientBin/
|
||||||
|
[Ss]tyle[Cc]op.*
|
||||||
|
~$*
|
||||||
|
*~
|
||||||
|
*.dbmdl
|
||||||
|
*.[Pp]ublish.xml
|
||||||
|
*.pfx
|
||||||
|
*.publishsettings
|
||||||
|
|
||||||
|
# RIA/Silverlight projects
|
||||||
|
Generated_Code/
|
||||||
|
|
||||||
|
# Backup & report files from converting an old project file to a newer
|
||||||
|
# Visual Studio version. Backup files are not needed, because we have git ;-)
|
||||||
|
_UpgradeReport_Files/
|
||||||
|
Backup*/
|
||||||
|
UpgradeLog*.XML
|
||||||
|
UpgradeLog*.htm
|
||||||
|
|
||||||
|
# SQL Server files
|
||||||
|
App_Data/*.mdf
|
||||||
|
App_Data/*.ldf
|
||||||
|
|
||||||
|
|
||||||
|
#LightSwitch generated files
|
||||||
|
GeneratedArtifacts/
|
||||||
|
_Pvt_Extensions/
|
||||||
|
ModelManifest.xml
|
||||||
|
|
||||||
|
# =========================
|
||||||
|
# Windows detritus
|
||||||
|
# =========================
|
||||||
|
|
||||||
|
# Windows image file caches
|
||||||
|
Thumbs.db
|
||||||
|
ehthumbs.db
|
||||||
|
|
||||||
|
# Folder config file
|
||||||
|
Desktop.ini
|
||||||
|
|
||||||
|
# Recycle Bin used on file shares
|
||||||
|
$RECYCLE.BIN/
|
||||||
|
|
||||||
|
# Mac desktop service store files
|
||||||
|
.DS_Store
|
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
#include "CMonoDomain.h"
|
#include "CMonoDomain.h"
|
||||||
|
|
||||||
CMonoDomain::CMonoDomain( CMonoInterface* pMono, MonoDomain* pDomain, CResource* pResource, char* szName )
|
CMonoDomain::CMonoDomain( CMonoInterface* pMono, MonoDomain* pDomain, CResource* pResource, const char* szName )
|
||||||
{
|
{
|
||||||
this->m_pMono = pMono;
|
this->m_pMono = pMono;
|
||||||
this->m_pDomain = pDomain;
|
this->m_pDomain = pDomain;
|
||||||
@ -43,9 +43,15 @@ CMonoDomain::~CMonoDomain( void )
|
|||||||
if( this->m_pDomain )
|
if( this->m_pDomain )
|
||||||
{
|
{
|
||||||
mono_domain_finalize( this->m_pDomain, 2000 );
|
mono_domain_finalize( this->m_pDomain, 2000 );
|
||||||
|
|
||||||
|
MonoObject *pException = nullptr;
|
||||||
|
|
||||||
|
//mono_domain_try_unload( this->m_pDomain, &pException );
|
||||||
|
|
||||||
|
this->HandleException( pException );
|
||||||
}
|
}
|
||||||
|
|
||||||
this->m_pDomain = nullptr;
|
this->m_pDomain = nullptr;
|
||||||
|
|
||||||
this->m_pMonoAssembly = nullptr;
|
this->m_pMonoAssembly = nullptr;
|
||||||
this->m_pMonoImage = nullptr;
|
this->m_pMonoImage = nullptr;
|
||||||
@ -87,13 +93,7 @@ CMonoClass* CMonoDomain::FindOrAdd( MonoClass* klass )
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMonoDomain::Init( void )
|
bool CMonoDomain::Init( void )
|
||||||
{
|
|
||||||
this->m_pCorlib = new CMonoCorlib( this );
|
|
||||||
this->m_pMTALib = new CMonoMTALib( this );
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CMonoDomain::Start( void )
|
|
||||||
{
|
{
|
||||||
string sDirectory ( CMonoInterface::GetBinariesDirectory() + "/" + this->m_strName + "/" );
|
string sDirectory ( CMonoInterface::GetBinariesDirectory() + "/" + this->m_strName + "/" );
|
||||||
string sPath ( sDirectory + this->m_strName + ".dll" );
|
string sPath ( sDirectory + this->m_strName + ".dll" );
|
||||||
@ -109,8 +109,6 @@ bool CMonoDomain::Start( void )
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->GetResource()->RegisterEvents();
|
|
||||||
|
|
||||||
this->m_pMonoImage = mono_assembly_get_image( this->m_pMonoAssembly );
|
this->m_pMonoImage = mono_assembly_get_image( this->m_pMonoAssembly );
|
||||||
|
|
||||||
if( !this->m_pMonoImage )
|
if( !this->m_pMonoImage )
|
||||||
@ -129,11 +127,19 @@ bool CMonoDomain::Start( void )
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->m_pCorlib = new CMonoCorlib( this );
|
||||||
|
this->m_pMTALib = new CMonoMTALib( this );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CMonoDomain::Start( void )
|
||||||
|
{
|
||||||
CMonoMethod* pMethod = this->m_pMonoClass->GetMethod( "Main", 0 );
|
CMonoMethod* pMethod = this->m_pMonoClass->GetMethod( "Main", 0 );
|
||||||
|
|
||||||
if( !pMethod )
|
if( !pMethod )
|
||||||
{
|
{
|
||||||
g_pModuleManager->ErrorPrintf( "static method '%s::Main' not found in '%s.dll'\n", sClass.c_str(), this->m_strName.c_str() );
|
g_pModuleManager->ErrorPrintf( "Assembly '%s.dll' doesn't have an entry point.\n", this->m_strName.c_str() );
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -42,14 +42,14 @@ private:
|
|||||||
string m_strName;
|
string m_strName;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CMonoDomain ( CMonoInterface* pMono, MonoDomain* pDomain, CResource* pResource, char* szName );
|
CMonoDomain ( CMonoInterface* pMono, MonoDomain* pDomain, CResource* pResource, const char* szName );
|
||||||
~CMonoDomain ( void );
|
~CMonoDomain ( void );
|
||||||
|
|
||||||
void HandleException ( MonoObject* pException );
|
void HandleException ( MonoObject* pException );
|
||||||
|
|
||||||
CMonoClass* FindOrAdd ( MonoClass* klass );
|
CMonoClass* FindOrAdd ( MonoClass* klass );
|
||||||
|
|
||||||
void Init ( void );
|
bool Init ( void );
|
||||||
bool Start ( void );
|
bool Start ( void );
|
||||||
void Unload ( void );
|
void Unload ( void );
|
||||||
bool Set ( bool bForce );
|
bool Set ( bool bForce );
|
||||||
|
@ -21,6 +21,8 @@ CMonoInterface::CMonoInterface( void )
|
|||||||
|
|
||||||
mono_debug_init( MONO_DEBUG_FORMAT_MONO );
|
mono_debug_init( MONO_DEBUG_FORMAT_MONO );
|
||||||
|
|
||||||
|
mono_trace_set_level_string( "error" );
|
||||||
|
|
||||||
this->m_pMonoDomain = mono_jit_init_version( "Mono Root", "v4.0.30319" );
|
this->m_pMonoDomain = mono_jit_init_version( "Mono Root", "v4.0.30319" );
|
||||||
|
|
||||||
CMonoFunctions::AddInternals();
|
CMonoFunctions::AddInternals();
|
||||||
@ -35,9 +37,9 @@ CMonoInterface::~CMonoInterface( void )
|
|||||||
SAFE_DELETE( this->m_pGC );
|
SAFE_DELETE( this->m_pGC );
|
||||||
}
|
}
|
||||||
|
|
||||||
CMonoDomain* CMonoInterface::CreateAppdomain( CResource* pResource, char* szName, char* szConfig )
|
CMonoDomain* CMonoInterface::CreateAppdomain( CResource* pResource, const char* szName, char* szConfig )
|
||||||
{
|
{
|
||||||
MonoDomain* pMonoDomain = mono_domain_create_appdomain( szName, szConfig );
|
MonoDomain* pMonoDomain = mono_domain_create_appdomain( const_cast< char* >( szName ), szConfig );
|
||||||
|
|
||||||
if( pMonoDomain )
|
if( pMonoDomain )
|
||||||
{
|
{
|
||||||
@ -50,6 +52,4 @@ CMonoDomain* CMonoInterface::CreateAppdomain( CResource* pResource, char* szName
|
|||||||
void CMonoInterface::SetDomain( MonoDomain* pDomain, bool bForce )
|
void CMonoInterface::SetDomain( MonoDomain* pDomain, bool bForce )
|
||||||
{
|
{
|
||||||
mono_domain_set( pDomain != nullptr ? pDomain : this->m_pMonoDomain, bForce );
|
mono_domain_set( pDomain != nullptr ? pDomain : this->m_pMonoDomain, bForce );
|
||||||
|
}
|
||||||
mono_domain_set_config( pDomain != nullptr ? pDomain : this->m_pMonoDomain, "mods/deathmatch/", "mods/deathmatch/mono/etc/mono/4.5/machine.config" );
|
|
||||||
}
|
|
||||||
|
@ -30,7 +30,7 @@ public:
|
|||||||
CMonoInterface ( void );
|
CMonoInterface ( void );
|
||||||
~CMonoInterface ( void );
|
~CMonoInterface ( void );
|
||||||
|
|
||||||
CMonoDomain* CreateAppdomain ( CResource* pResource, char* szName, char* szConfig );
|
CMonoDomain* CreateAppdomain ( CResource* pResource, const char* szName, char* szConfig );
|
||||||
|
|
||||||
void SetDomain ( MonoDomain* pDomain = nullptr, bool bForce = false );
|
void SetDomain ( MonoDomain* pDomain = nullptr, bool bForce = false );
|
||||||
|
|
||||||
|
@ -27,12 +27,14 @@ CResource::~CResource( void )
|
|||||||
|
|
||||||
this->GetMono()->GetGC()->Collect( this->GetMono()->GetGC()->GetMaxGeneration() );
|
this->GetMono()->GetGC()->Collect( this->GetMono()->GetGC()->GetMaxGeneration() );
|
||||||
|
|
||||||
this->GetMono()->SetDomain( nullptr, true );
|
//this->GetMono()->SetDomain( nullptr, true );
|
||||||
|
|
||||||
g_pResourceManager->RemoveFromList( this );
|
g_pResourceManager->RemoveFromList( this );
|
||||||
|
|
||||||
SAFE_DELETE( this->m_pMonoDomain );
|
SAFE_DELETE( this->m_pMonoDomain );
|
||||||
|
|
||||||
|
this->GetMono()->SetDomain( nullptr, true );
|
||||||
|
|
||||||
this->m_pMono = nullptr;
|
this->m_pMono = nullptr;
|
||||||
this->m_pLuaVM = nullptr;
|
this->m_pLuaVM = nullptr;
|
||||||
}
|
}
|
||||||
@ -147,7 +149,7 @@ bool CResource::Init( void )
|
|||||||
{
|
{
|
||||||
if( this->m_pLuaVM )
|
if( this->m_pLuaVM )
|
||||||
{
|
{
|
||||||
this->m_pMonoDomain = this->GetMono()->CreateAppdomain( this, const_cast< char* >( this->m_sName.c_str() ), nullptr );
|
this->m_pMonoDomain = this->GetMono()->CreateAppdomain( this, this->m_sName.c_str(), nullptr );
|
||||||
|
|
||||||
if( !this->m_pMonoDomain )
|
if( !this->m_pMonoDomain )
|
||||||
{
|
{
|
||||||
@ -160,11 +162,19 @@ bool CResource::Init( void )
|
|||||||
|
|
||||||
this->m_pMonoDomain->Set( false );
|
this->m_pMonoDomain->Set( false );
|
||||||
|
|
||||||
this->m_pMonoDomain->Init();
|
if( this->m_pMonoDomain->Init() )
|
||||||
|
{
|
||||||
|
this->RegisterEvents();
|
||||||
|
|
||||||
this->m_pMonoDomain->Start();
|
if( this->m_pMonoDomain->Start() )
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
CLuaArguments pLuaArguments;
|
||||||
|
|
||||||
|
pLuaArguments.Call( this->m_pLuaVM, "cancelEvent" );
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -42,6 +42,7 @@ extern "C"
|
|||||||
#include <mono/metadata/environment.h>
|
#include <mono/metadata/environment.h>
|
||||||
#include <mono/metadata/threads.h>
|
#include <mono/metadata/threads.h>
|
||||||
#include <mono/metadata/mono-gc.h>
|
#include <mono/metadata/mono-gc.h>
|
||||||
|
#include <mono/utils/mono-logger.h>
|
||||||
|
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user