87 lines
3 KiB
C#
87 lines
3 KiB
C#
// Decompiled with JetBrains decompiler
|
||
// Type: Terraria.Social.WeGame.CoreSocialModule
|
||
// Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null
|
||
// MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83
|
||
// Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe
|
||
|
||
using rail;
|
||
using System;
|
||
using System.Runtime.InteropServices;
|
||
using System.Threading;
|
||
using System.Windows.Forms;
|
||
|
||
namespace Terraria.Social.WeGame
|
||
{
|
||
public class CoreSocialModule : ISocialModule
|
||
{
|
||
private RailCallBackHelper _callbackHelper = new RailCallBackHelper();
|
||
private static object _railTickLock = new object();
|
||
private bool isRailValid;
|
||
|
||
[DllImport("kernel32.dll")]
|
||
private static extern uint GetCurrentThreadId();
|
||
|
||
public static event Action OnTick;
|
||
|
||
public void Initialize()
|
||
{
|
||
RailGameID railGameId = new RailGameID();
|
||
((RailComparableID) railGameId).id_ = (__Null) 2000328L;
|
||
string[] strArray = new string[1]{ " " };
|
||
if (rail_api.RailNeedRestartAppForCheckingEnvironment(railGameId, strArray.Length, strArray))
|
||
Environment.Exit(1);
|
||
if (!rail_api.RailInitialize())
|
||
Environment.Exit(1);
|
||
// ISSUE: method pointer
|
||
this._callbackHelper.RegisterCallback((RAILEventID) 2, new RailEventCallBackHandler((object) null, __methodptr(RailEventCallBack)));
|
||
this.isRailValid = true;
|
||
ThreadPool.QueueUserWorkItem(new WaitCallback(this.TickThread), (object) null);
|
||
Main.OnTickForThirdPartySoftwareOnly += new Action(CoreSocialModule.RailEventTick);
|
||
}
|
||
|
||
public static void RailEventTick()
|
||
{
|
||
rail_api.RailFireEvents();
|
||
if (!Monitor.TryEnter(CoreSocialModule._railTickLock))
|
||
return;
|
||
Monitor.Pulse(CoreSocialModule._railTickLock);
|
||
Monitor.Exit(CoreSocialModule._railTickLock);
|
||
}
|
||
|
||
private void TickThread(object context)
|
||
{
|
||
Monitor.Enter(CoreSocialModule._railTickLock);
|
||
while (this.isRailValid)
|
||
{
|
||
if (CoreSocialModule.OnTick != null)
|
||
CoreSocialModule.OnTick();
|
||
Monitor.Wait(CoreSocialModule._railTickLock);
|
||
}
|
||
Monitor.Exit(CoreSocialModule._railTickLock);
|
||
}
|
||
|
||
public void Shutdown()
|
||
{
|
||
Application.ApplicationExit += (EventHandler) ((obj, evt) => this.isRailValid = false);
|
||
this._callbackHelper.UnregisterAllCallback();
|
||
rail_api.RailFinalize();
|
||
}
|
||
|
||
public static void RailEventCallBack(RAILEventID eventId, EventBase data)
|
||
{
|
||
if (eventId != 2)
|
||
return;
|
||
CoreSocialModule.ProcessRailSystemStateChange((RailSystemState) ((RailSystemStateChanged) data).state);
|
||
}
|
||
|
||
public static void SaveAndQuitCallBack() => Main.WeGameRequireExitGame();
|
||
|
||
private static void ProcessRailSystemStateChange(RailSystemState state)
|
||
{
|
||
if (state != 2 && state != 3)
|
||
return;
|
||
int num = (int) MessageBox.Show("检测到WeGame异常,游戏将自动保存进度并退出游戏", "Terraria--WeGame Error");
|
||
WorldGen.SaveAndQuit(new Action(CoreSocialModule.SaveAndQuitCallBack));
|
||
}
|
||
}
|
||
}
|