コード例 #1
0
        /// <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;
            }
        }