From 5635b0d770383333238f2dcdc0824392aefdc537 Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期一, 10 十二月 2018 11:39:55 +0800
Subject: [PATCH] 3335 准备跨服登录流程。

---
 Core/NetworkPackage/GameNetSystem.cs |  201 ++++++++++++++++++++++++++++++-------------------
 1 files changed, 122 insertions(+), 79 deletions(-)

diff --git a/Core/NetworkPackage/GameNetSystem.cs b/Core/NetworkPackage/GameNetSystem.cs
index aeda431..73d32a2 100644
--- a/Core/NetworkPackage/GameNetSystem.cs
+++ b/Core/NetworkPackage/GameNetSystem.cs
@@ -16,11 +16,9 @@
     DisconnectState disconnectState;
 
     NetState m_NetState;
-    public NetState netState
-    {
+    public NetState netState {
         get { return this.m_NetState; }
-        set
-        {
+        set {
             if (this.m_NetState != value)
             {
                 switch (m_NetState)
@@ -71,17 +69,22 @@
         }
     }
 
-    private ClientSocketController socketController;
-    public bool socketConnected { get { return socketController == null ? false : socketController.Connected; } }
+    private ClientSocket mainSocket;
+    public bool mainSocketConnected { get { return mainSocket == null ? false : mainSocket.connected; } }
 
-    Queue<GameNetPackBasic> packQueue = new Queue<GameNetPackBasic>();
+    public float timeSinceMainSocketLastProtocol {
+        get { return mainSocket == null ? 0f : (float)(DateTime.Now - mainSocket.lastPackageTime).TotalSeconds; }
+    }
 
-    DateTime m_LastPackageTime;
-    public DateTime lastPackageTime { get { return m_LastPackageTime; } }
+    private ClientSocket crossServerSocket;
+    public bool crossServerSocketConnected { get { return crossServerSocket == null ? false : crossServerSocket.connected; } }
 
-    Action onConnected;
-    public event Action disconnectEvent;
-    public event Action connectedEvent;
+    public float timeSinceCrossServerSocketLastProtocol {
+        get { return crossServerSocket == null ? 0f : (float)(DateTime.Now - crossServerSocket.lastPackageTime).TotalSeconds; }
+    }
+
+    Queue<GameNetPackBasic> mainProtocolQueue = new Queue<GameNetPackBasic>();
+    Queue<GameNetPackBasic> crossSeverProtocolQueue = new Queue<GameNetPackBasic>();
 
     public GameNetSystem()
     {
@@ -100,13 +103,13 @@
         netState = NetState.NerverConnect;
     }
 
-    public void BeginConnectGameServer(string _ip, int _port, Action _onConnected)
+    public void BeginConnectGameServer(string ip, int port, Action onConnected)
     {
         try
         {
-            if (socketController != null && socketController.Connected)
+            if (mainSocketConnected)
             {
-                socketController.CloseConnect();
+                mainSocket.CloseConnect();
             }
         }
         catch (System.Exception ex)
@@ -114,77 +117,117 @@
             DebugEx.Log(ex);
         }
 
-        socketController = new ClientSocketController();
+        mainSocket = new ClientSocket(SocketType.Main);
+        mainProtocolQueue.Clear();
 
-        GameNetEncode.ResetEncodeIndex();
-        lock (packQueue)
+        mainSocket.Connect(ip, port, () =>
         {
-            packQueue.Clear();
-        }
-
-        onConnected = _onConnected;
-        socketController.Connect(_ip, _port, OnSocketConnected);
+            if (onConnected != null)
+            {
+                onConnected();
+            }
+        });
     }
 
-    public void SendInfo(GameNetPackBasic vNetPack)
+    public void BeginConnectCrossServer(string ip, int port, Action onConnected)
     {
-        if (socketController != null)
+        try
         {
-            socketController.SendInfo(vNetPack);
-            DebugPkgCache.Push(vNetPack);
+            if (crossServerSocketConnected)
+            {
+                crossServerSocket.CloseConnect();
+            }
+        }
+        catch (System.Exception ex)
+        {
+            DebugEx.Log(ex);
+        }
+
+        crossServerSocket = new ClientSocket(SocketType.CrossSever);
+        crossSeverProtocolQueue.Clear();
+        this.crossServerSocket.Connect(ip, port, () =>
+        {
+            if (onConnected != null)
+            {
+                onConnected();
+            }
+        });
+    }
+
+    public void SendInfo(GameNetPackBasic protocol)
+    {
+        if (mainSocket != null)
+        {
+            mainSocket.SendInfo(protocol);
+            DebugPkgCache.Push(protocol);
         }
     }
 
     public void SendInfo(byte[] vBytes)
     {
-        if (socketController != null)
+        if (mainSocket != null)
         {
-            socketController.SendInfo(vBytes);
+            mainSocket.SendInfo(vBytes);
         }
     }
 
-    public void PushPackage(GameNetPackBasic _package)
+    public void SendToCrossServer(GameNetPackBasic protocol)
     {
-        if (_package == null)
+        if (crossServerSocket != null)
         {
-            return;
+            crossServerSocket.SendInfo(protocol);
+            DebugPkgCache.Push(protocol);
         }
+    }
 
-        m_LastPackageTime = DateTime.Now;
-
-        lock (packQueue)
+    public void PushPackage(GameNetPackBasic protocol, SocketType type)
+    {
+        lock (this)
         {
-            lock (_package)
+            if (protocol == null)
             {
-                if (PackageRegedit.Contain(_package.cmd))
-                {
-                    packQueue.Enqueue(_package);
-                    DebugPkgCache.Push(_package);
-                }
-                else
-                {
-                    DebugEx.LogWarningFormat("鏁版嵁鍖�(cmd:{0})鏈櫥璁帮紒", _package.cmd);
-                }
+                return;
             }
 
-        }
+            if (PackageRegedit.Contain(protocol.cmd))
+            {
+                switch (type)
+                {
+                    case SocketType.Main:
+                        mainProtocolQueue.Enqueue(protocol);
+                        break;
+                    case SocketType.CrossSever:
+                        crossSeverProtocolQueue.Enqueue(protocol);
+                        break;
+                    default:
+                        break;
+                }
 
+                DebugPkgCache.Push(protocol);
+            }
+            else
+            {
+                DebugEx.LogWarningFormat("鏁版嵁鍖�(cmd:{0})鏈櫥璁帮紒", protocol.cmd);
+            }
+        }
     }
 
     public void Disconnect()
     {
         try
         {
-            if (socketController != null)
+            if (mainSocket != null)
             {
-                socketController.CloseConnect();
+                mainSocket.CloseConnect();
             }
-            GameNetEncode.ResetEncodeIndex();
 
-            lock (packQueue)
+            if (crossServerSocket != null)
             {
-                packQueue.Clear();
+                crossServerSocket.CloseConnect();
             }
+
+            mainProtocolQueue.Clear();
+            crossSeverProtocolQueue.Clear();
         }
         catch (Exception ex)
         {
@@ -193,6 +236,8 @@
         finally
         {
             netState = NetState.DisConnected;
+            var loginModel = ModelCenter.Instance.GetModel<LoginModel>();
+            loginModel.busy = false;
         }
 
     }
@@ -201,15 +246,18 @@
     {
         try
         {
-            if (socketController != null)
+            if (mainSocket != null)
             {
-                socketController.CloseConnect();
+                mainSocket.CloseConnect();
             }
-            GameNetEncode.ResetEncodeIndex();
-            lock (packQueue)
+
+            if (crossServerSocket != null)
             {
-                packQueue.Clear();
+                crossServerSocket.CloseConnect();
             }
+
+            mainProtocolQueue.Clear();
+            crossSeverProtocolQueue.Clear();
         }
         catch (Exception ex)
         {
@@ -218,7 +266,6 @@
         finally
         {
             netState = NetState.AccountLogin;
-
             var loginModel = ModelCenter.Instance.GetModel<LoginModel>();
             loginModel.busy = false;
             loginModel.ReAccountLogin();
@@ -229,15 +276,18 @@
     {
         try
         {
-            if (socketController != null)
+            if (mainSocket != null)
             {
-                socketController.CloseConnect();
+                mainSocket.CloseConnect();
             }
-            GameNetEncode.ResetEncodeIndex();
-            lock (packQueue)
+
+            if (crossServerSocket != null)
             {
-                packQueue.Clear();
+                crossServerSocket.CloseConnect();
             }
+
+            mainProtocolQueue.Clear();
+            crossSeverProtocolQueue.Clear();
         }
         catch (Exception ex)
         {
@@ -252,7 +302,6 @@
             StageManager.Instance.LoadLoginStage();
             NetLinkWin.Hide();
         }
-
     }
 
     public void OnAccountLogin()
@@ -267,26 +316,14 @@
 
     void OnUpdate()
     {
-        lock (packQueue)
+        while (mainProtocolQueue.Count > 0)
         {
-            if (packQueue != null)
-            {
-                while (packQueue.Count > 0)
-                {
-                    PackageRegedit.Distribute(packQueue.Dequeue());
-                }
-            }
+            PackageRegedit.Distribute(mainProtocolQueue.Dequeue());
         }
 
-    }
-
-    private void OnSocketConnected()
-    {
-        m_LastPackageTime = DateTime.Now;
-        if (onConnected != null)
+        while (crossSeverProtocolQueue.Count > 0)
         {
-            onConnected();
-            onConnected = null;
+            PackageRegedit.Distribute(crossSeverProtocolQueue.Dequeue());
         }
     }
 
@@ -300,4 +337,10 @@
         DisConnected = 6,
     }
 
+    public enum SocketType
+    {
+        Main = 1,
+        CrossSever = 2,
+    }
+
 }

--
Gitblit v1.8.0