/// <summary> /// once 给Error Query 使用,如果出错,就不继续发送其他消息 /// </summary> /// <param name="session"></param> /// <param name="msgList"></param> /// <param name="runOne"></param> private void RunQueue(Queue <IGameMessage> msgList, bool runOne = false) { try { while (msgList.Count > 0) { IGameMessage gameMsg = msgList.Dequeue(); var msgStr = gameMsg.GetMessage(); var sendTarget = gameMsg.MessageSendTarget.SendTarget; switch (sendTarget) { case SendTarget.UserInRoom: var targetList = _GameServer.GetSessions(a => a.GameAttr.RoomCode == gameMsg.MessageSendTarget.TargetRoom); foreach (var target in targetList) { if (target.Connected) { target.Send(msgStr); } } break; case SendTarget.Self: if (!string.IsNullOrEmpty(gameMsg.SessionId)) { var session = _GameServer.GetSessionByID(gameMsg.SessionId); if (session != null && session.Connected) { session.Send(msgStr); } } break; } if (runOne) { break; } } } catch (Exception ex) { msgList.Clear(); throw ex; } }