Browse Source

继续调试战斗服务器

王刚 3 years ago
parent
commit
43a7424f25

+ 10 - 10
CSserver/BattleRoom/Program.cs

@@ -32,18 +32,18 @@ namespace BattleRoom
             var port = 6005;                                                                // 连接本机的大厅服务端口            
             //var endPoint = new IPEndPoint(IPAddress.Loopback, port);
             var endPoint = new IPEndPoint(IPAddress.Parse("192.168.10.17"), port);
-            using (var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
+            var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+
+            try
             {
-                try
-                {
-                    await client.ConnectAsync(endPoint);
-                }
-                catch (Exception ee)
-                {
-                    Debug.WriteLine(ee.Message);
-                }
-                RoomManager.Instance.ServerPeer = new ServerPeer(client);                    // 给管理器的服务器间socket赋值
+                await client.ConnectAsync(endPoint);
+            }
+            catch (Exception ee)
+            {
+                Debug.WriteLine(ee.Message);
             }
+            RoomManager.Instance.ServerPeer = new ServerPeer(client);                    // 给管理器的服务器间socket赋值
+
         }
 
         static void selfTest()

+ 5 - 1
CSserver/BattleRoom/server/Peer.cs

@@ -88,7 +88,10 @@ namespace BattleRoom
             Id = _UniqPeerId++;
             var t = Task.Run(() => recv(Sock));                                 // 新建接收线程 
             var tcs = Task.Run(WriteToClient);                                  // 向客户端发送消息线程
-
+            OnSocketDisconnected = () =>
+            {
+                Console.WriteLine("错误! socket断开!");
+            };
         }
 
 
@@ -180,6 +183,7 @@ namespace BattleRoom
                     while (_databuffer.GetData(out sSocketData _socketData))                         //取出一条完整数据,转到room的消息队列,由room统一进行逻辑处理 
                     {
                         Console.WriteLine(" recv: " + _socketData._protocallType);
+                        Console.WriteLine( $"CurrentState: {CurrentState}");
                         switch (CurrentState)
                         {
                             case ClientState.Connected:

+ 2 - 0
CSserver/BattleRoom/server/Room.cs

@@ -224,6 +224,7 @@ namespace BattleRoom
         private object lock_peers = new object();
         public void AddPeer(Peer p)
         {
+            Console.WriteLine("加入房间ing");
             if (CurrentState == RoomState.Open)
             {
                 lock (lock_peers)
@@ -236,6 +237,7 @@ namespace BattleRoom
 
                 ClientPeers.Values.ToList().ForEach(c => list.PlayerUids.Add(c.UID));
                 Broadcast(TargetType.All, eProtocalCommand.ScMdEnterRoom, list);
+                Console.WriteLine("房间内广播进入房间事件!");
             }
             else
             {

+ 7 - 2
CSserver/BattleRoom/server/RoomManager.cs

@@ -59,7 +59,7 @@ namespace BattleRoom
             lock (lock_peers)
             {
                 this.ClientPeers.Add(p.Id, p);
-                Console.WriteLine(p.UID + " 连接上来了!");
+                Console.WriteLine(p.Id + " 连接上来了!");
             }
 
         }
@@ -86,14 +86,16 @@ namespace BattleRoom
         void On_BtLogin(int peerId, sSocketData data)
         {
             var msg = CS_BT_Login.Parser.ParseFrom(data._data);
-
+            Console.WriteLine("登录逻辑");
             if (this.ClientPeers.TryGetValue(peerId, out var peer))
             {
+                Console.WriteLine("寻找对应的房间");
                 roomDic.Values.ToList().ForEach(r => {
                     if (r.PlayerUids.Contains(msg.Uid))
                     {
                         peer.room = r;               // 设置自己的room
                         r.AddPeer(peer);
+                        Console.WriteLine("加入对应的房间");
                     }
                 });
 
@@ -101,6 +103,8 @@ namespace BattleRoom
                 peer.Properties.Add(PropertyName.Zoneid, msg.Zoneid);
                 peer.CurrentState = ClientState.InGame;
                 peer.SendEvent(eProtocalCommand.ScBtLogin, new SC_BT_Login() { });
+                Console.WriteLine("寻找对应的房间");
+
             }
         }
 
@@ -112,6 +116,7 @@ namespace BattleRoom
         /// <param name="data"></param>
         public void CreateRoom(sSocketData data)
         {
+            Console.WriteLine("接收到创建房间指令!");
             var msg = SS_CreateBattleServer.Parser.ParseFrom(data._data);
              
             var room = new Room(msg.RoomId, msg.PlayerUids);

+ 4 - 1
CSserver/BattleRoom/server/ServerPeer.cs

@@ -18,7 +18,7 @@ namespace BattleRoom
         /// socket连接
         /// </summary>
         public readonly Socket Sock;
-
+        public Action OnSocketDisconnected;
         /// <summary>
         /// 消息分发
         /// </summary>
@@ -37,6 +37,7 @@ namespace BattleRoom
             var t = Task.Run(() => recv(Sock));                                 // 新建接收线程 
             var tcs = Task.Run(WriteToClient);                                  // 向客户端发送消息线程
             var tmsglp = Task.Run(MsgLoop);
+            OnSocketDisconnected = () => { Console.WriteLine("socket连接已断开!"); };
         }
 
         #region 逻辑处理
@@ -151,7 +152,9 @@ namespace BattleRoom
                     var length = await socketServer.ReceiveAsync(new ArraySegment<byte>(arrServerRecMsg), SocketFlags.None);   // 将接收到的信息存入到内存缓冲区,并返回其字节数组的长度    
                     if (length <= 0)                                                       // 视为客户端已经close连接
                     {
+                        OnSocketDisconnected?.Invoke();
                         break;
+
                     }
                     _databuffer.AddBuffer(arrServerRecMsg, length);                         //将收到的数据添加到缓存器中
                     while (_databuffer.GetData(out sSocketData _socketData))                //取出一条完整数据,转到room的消息队列,由room统一进行逻辑处理 

+ 3 - 2
CSserver/MultiDup/server/Room.cs

@@ -117,7 +117,7 @@ namespace MultiDup
         {
             if (this.ClientPeers.TryGetValue(peerId, out var peer))
             {
-                if (null != Program.serverPeer)                                                     // battleServer创建对应的房间
+                if (null != Program.serverPeer)                                                      // battleServer创建对应的房间
                 {
                     var sendmsg = new SS_CreateBattleServer() { RoomId = this.Id };
                     this.ClientPeers.Values.ToList().ForEach(p =>
@@ -125,6 +125,7 @@ namespace MultiDup
                         sendmsg.PlayerUids.Add(p.UID);
                     });
                     Program.serverPeer.SendEvent(eProtocalCommand.SsCreateBattleRoom, sendmsg);     // 向battle服务器发送创建房间的指令
+                    Console.WriteLine("发送创建房间指令");
                 }
                 else
                 {
@@ -214,7 +215,7 @@ namespace MultiDup
                     p.room = this;
                     this.ClientPeers.Add(p.Id, p);
                 }
-                var list = new SC_MD_EnterRoom() { Uid = p.UID, Zoneid = p.zoneid };
+                var list = new SC_MD_EnterRoom() {  Ip = BattleServerIp,Port= BattleServerPort, Uid = p.UID, Zoneid = p.zoneid };
 
                 ClientPeers.Values.ToList().ForEach(c => list.PlayerUids.Add(c.UID));
                 Broadcast(TargetType.All, eProtocalCommand.ScMdEnterRoom, list);

+ 5 - 2
CSserver/MultiDup/server/ServerPeer.cs

@@ -18,6 +18,7 @@ namespace MultiDup
         /// </summary>
         public readonly Socket Sock;
 
+        public Action OnSocketDisconnected;
         /// <summary>
         /// 消息分发
         /// </summary>
@@ -36,6 +37,7 @@ namespace MultiDup
             var t = Task.Run(() => recv(Sock));                                 // 新建接收线程 
             var tcs = Task.Run(WriteToClient);                                  // 向客户端发送消息线程
             var tmsglp = Task.Run(MsgLoop);
+            OnSocketDisconnected = () => { Console.WriteLine("socket连接已断开!"); };
         }
 
         #region 逻辑处理
@@ -44,8 +46,8 @@ namespace MultiDup
         {
 
             var msg = SS_CreateBattleServer.Parser.ParseFrom(_sData._data);
-            // 开辟一个处理对象, room, 然后后续逻辑由room对象等待连接过来. 
-
+            // 开辟一个处理对象, room, 然后后续逻辑由room对象等待连接过来.    
+            Console.WriteLine("接收到创建房间指令");
 
             // 返回成功
             this.SendEvent(eProtocalCommand.SsCreateBattleRoomOk, new SS_CreateBattleServerOK() { });
@@ -153,6 +155,7 @@ namespace MultiDup
                     var length = await socketServer.ReceiveAsync(new ArraySegment<byte>(arrServerRecMsg), SocketFlags.None);   // 将接收到的信息存入到内存缓冲区,并返回其字节数组的长度    
                     if (length <= 0)                                                       // 视为客户端已经close连接
                     {
+                        OnSocketDisconnected?.Invoke();
                         break;
                     }
                     _databuffer.AddBuffer(arrServerRecMsg, length);                         //将收到的数据添加到缓存器中

+ 25 - 18
CSserver/clientTest/Program_MultiDup.cs

@@ -88,24 +88,31 @@ namespace clientTest.multiDup
                     Debug.WriteLine(ee.Message);
                 }
 
-
-                var t = Task.Run(() => recv(client));                    // 开启recv监听协程
-                try
-                {
-                    BtLogIn(client).Wait();
-                    // 连上来之后, 创建房间, 开始游戏, 退出房间
-                    BtBroadCast(client).Wait();
-                    BtBroadCast(client).Wait();
-                    BtBroadCast(client).Wait();
-                    Console.WriteLine("已经广播3次,exiting.");
-                }
-                catch (Exception e)
+                if (client.Connected)
                 {
-                    client.Close();
+                    Thread.Sleep(2000);
+                    var t = Task.Run(() => recv(client));                    // 开启recv监听协程
+                    try
+                    {
+                        BtLogIn(client).Wait();
+                        // 连上来之后, 创建房间, 开始游戏, 退出房间
+                        BtBroadCast(client).Wait();
+                        BtBroadCast(client).Wait();
+                        BtBroadCast(client).Wait();
+                        Console.WriteLine("已经广播3次,exiting.");
+                    }
+                    catch (Exception e)
+                    {
+                        client.Close();
+                    }
+                    finally
+                    {
+                        client.Close();
+                    }
+
                 }
-                finally
-                {
-                    client.Close();
+                else {
+                    Console.WriteLine("连接失败!");
                 }
 
             }
@@ -124,7 +131,7 @@ namespace clientTest.multiDup
         static void On_GameOver(sSocketData data)
         {
             Console.WriteLine("xx已离开房间! ");
-            Task.Delay(3000).ContinueWith(t => Environment.Exit(0));
+            //Task.Delay(3000).ContinueWith(t => Environment.Exit(0));
         }
 
         #endregion
@@ -187,9 +194,9 @@ namespace clientTest.multiDup
                     Thread.Sleep(r.Next(1000, 3000));
                     await BeginGame(client);
                     Thread.Sleep(r.Next(1000, 3000));
+                    Console.ReadKey();
                     await LeaveGame(client);
                     Thread.Sleep(r.Next(1000, 3000));
-                    Console.ReadKey();
                 }
                 catch (Exception e)
                 {