diff --git a/Assets/GameScripts/HotFix/GameBase/Loom.meta b/Assets/GameScripts/HotFix/GameBase/Loom.meta
new file mode 100644
index 00000000..e104ca98
--- /dev/null
+++ b/Assets/GameScripts/HotFix/GameBase/Loom.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: dab5f3e08b4367d41b801af29d381ca8
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GameScripts/HotFix/GameBase/Loom/Loom.cs b/Assets/GameScripts/HotFix/GameBase/Loom/Loom.cs
new file mode 100644
index 00000000..e020612e
--- /dev/null
+++ b/Assets/GameScripts/HotFix/GameBase/Loom/Loom.cs
@@ -0,0 +1,190 @@
+using UnityEngine;
+using System.Collections.Generic;
+using System;
+using System.Threading;
+using System.Linq;
+
+/*******************************************************************************
+ //开启一个Loom进程
+ Loom.RunAsync(() =>
+ {
+ aucThread = new Thread(ReceiveMsg);
+ aucThread.Start();
+ }
+
+ //进程调用主线程方法
+ MainPack pack = (MainPack)MainPack.Descriptor.Parser.ParseFrom(buffer, 0, len);
+ Loom.QueueOnMainThread((param) =>
+ {
+ UdpHandleResponse(pack);
+ }, null);
+
+ *******************************************************************************/
+namespace GameBase
+{
+
+ ///
+ /// Loom多线程通信。
+ ///
+ ///
+ public class Loom : MonoBehaviour
+ {
+ public Dictionary TokenSourcesDictionary = new Dictionary();
+ private static readonly int MaxThreads = 8;
+ private static int _numThreads;
+ private static Loom _current;
+
+ public static Loom Current
+ {
+ get
+ {
+ Initialize();
+ return _current;
+ }
+ }
+
+ public void Awake()
+ {
+ _current = this;
+ _initialized = true;
+ }
+
+ protected void OnDestroy()
+ {
+ }
+
+ private static bool _initialized;
+
+ private static void Initialize()
+ {
+ if (!_initialized)
+ {
+ if (!Application.isPlaying)
+ {
+ return;
+ }
+
+ _initialized = true;
+
+ var obj = new GameObject("[Loom]");
+
+ _current = obj.AddComponent();
+
+ DontDestroyOnLoad(obj);
+ }
+ }
+
+ public struct NoDelayedQueueItem
+ {
+ public Action