コード例 #1
0
ファイル: GameSessionManager.cs プロジェクト: rongxiong/Scut
 public static bool Register(GameSession session)
 {
     GameSession old;
     if (_sessionDict.TryGetValue(session.Sid, out old))
     {
         return _sessionDict.TryUpdate(session.Sid, session, old);
     }
     return _sessionDict.TryAdd(session.Sid, session);
 }
コード例 #2
0
ファイル: GameSessionManager.cs プロジェクト: rongxiong/Scut
 public static void Remove(GameSession session)
 {
     GameSession value;
     _sessionDict.TryRemove(session.Sid, out value);
 }
コード例 #3
0
ファイル: GameTransponder.cs プロジェクト: rongxiong/Scut
 /// <summary>
 /// 从游戏服接收数据
 /// </summary>
 /// <param name="gameAddress">游戏服的地址</param>
 /// <param name="data"></param>
 public override void Receive(string gameAddress, byte[] data)
 {
     try
     {
         PacketMessage packet = PacketMessage.Parse(data);
         var head = packet.Head;
         GameSession session = null;
         switch (head.MsgType)
         {
             case PacketMsgType.None:
                 //心跳包
                 session = GameSessionManager.GetSession(head.GameId, head.ServerId);
                 if (session != null)
                 {
                     session.GameAddress = gameAddress;
                     session.AccessTime = DateTime.Now;
                     Console.WriteLine("{0}>>Connect to host of game server {1}-{2} from {3}", DateTime.Now.ToLongTimeString(), head.GameId, head.ServerId, gameAddress);
                 }
                 break;
             case PacketMsgType.Register:
                 session = new GameSession(head.GameId, head.ServerId);
                 session.GameAddress = gameAddress;
                 session.AccessTime = DateTime.Now;
                 GameSessionManager.Register(session);
                 break;
             case PacketMsgType.Push:
                 OnSendToClient(head.Address, data);
                 break;
             case PacketMsgType.SendTo:
             case PacketMsgType.Request:
                 //发送到其它通道
                 Send(head.Address, packet.ToByte());
                 break;
             case PacketMsgType.Broadcast:
                 //广播到客户端
                 var clientPointList = ClientConnectManager.FindAll(head.GameId, head.ServerId);
                 foreach (var endPoint in clientPointList)
                 {
                     OnSendToClient(endPoint.ToString(), data);
                 }
                 break;
             default:
                 throw new Exception(string.Format("The message type:{0} is not supported.", head.MsgType));
         }
     }
     catch (Exception ex)
     {
         TraceLog.WriteError("Receive game {0} error:{1}", gameAddress, ex);
     }
 }