コード例 #1
0
ファイル: VoiceScheduler.cs プロジェクト: xiaoyj/Space
 private void SaveNoScheduledUser(IDlScheduleUser user, DLUserTag userTag, short tti)
 {
     SimulationUser user2 = (SimulationUser) user;
     if (user2.PreScheduleTime != -1)
     {
         user2.VoiceContinueLost = (short) (user2.VoiceContinueLost + 1);
         user2.TotalPackageLossCount = (short) (user2.TotalPackageLossCount + 1);
         user2.VoiceMaxContinueLost = Math.Max(user2.VoiceMaxContinueLost, user2.VoiceContinueLost);
     }
 }
コード例 #2
0
ファイル: ICICOpenAllotMethod.cs プロジェクト: xiaoyj/Space
 private void AllotResourceForEdgeUser(IDlScheduleUser user, DLUserTag userTag, int rbNeed)
 {
     if (this.resource.RbEdgeList.Count >= rbNeed)
     {
         this.AllotRbList(user, this.resource.RbEdgeList, rbNeed, this.IsSfSbSsSsStriNbrCarrier((IDlScheduleCarrier) user.SfSbSsSsStroNbr));
     }
     else
     {
         this.AllotResourceWhileEdgeRbNotEnough(user, userTag, rbNeed);
     }
 }
コード例 #3
0
ファイル: ICICOpenAllotMethod.cs プロジェクト: xiaoyj/Space
 private void AllotResourceForCenterUser(IDlScheduleUser user, DLUserTag userTag, int rbNeed)
 {
     int num = rbNeed - this.resource.RbCenterList.Count;
     this.AllotRbList(user, this.resource.RbCenterList, Math.Min(rbNeed, this.resource.RbCenterList.Count));
     //如果RbCenter不够的话,就会分一些RbEdge
     num = Math.Min(num, this.resource.RbEdgeList.Count);
     if (num > 0)
     {
         this.AllotRbList(user, this.resource.RbEdgeList, num);
     }
 }
コード例 #4
0
ファイル: DLScheduler.cs プロジェクト: xiaoyj/Space
 protected void ResetUserBeforeSchedule(IDlScheduleUser user, DLUserTag userTag)
 {
     user.RbList.Clear();
     user.RbgList.Clear();
     user.DlMcsEff = 0f;
     user.MacTBS = 0f;
     user.State = State.Wait;
     userTag.RbNeed = 0;
     SimulationUser user2 = (SimulationUser) user;
     user2.RbCombineSinr = 0f;
 }
コード例 #5
0
ファイル: VoiceScheduler.cs プロジェクト: xiaoyj/Space
 private bool ScheduleVoiceUser(IDlScheduleUser user, DLUserTag userTag, short ttiNum)
 {
     if (((base.Tag.UsableRbNumPerTti > 0) && (base.Tag.TypeARemaindPower > 0f)) && (base.Tag.TypeBRemaindPower > 0f))
     {
         float pdschSinr = user.PdschSinr;
         float mcsBySinr = DLScheduleCalaculateTool.GetMcsBySinr(user, pdschSinr);
         if (mcsBySinr <= 0f)
         {
             return false;
         }
         float minSinr = 0f;
         float mimoClutterGain = 0f;
         SimulationTools.GetMinSinrAndMimoClutterGain(user, ref minSinr, ref mimoClutterGain, pdschSinr);
         if (pdschSinr < minSinr)
         {
             return false;
         }
         float voicePacketSize = (user as SimulationUser).VoicePacketSize;
         //¸ù¾Ýtbs¼ÆËãRBÊý
         int rbNeed = DLScheduleCalaculateTool.CalculateRBCountByTbs(user, mcsBySinr, voicePacketSize, mimoClutterGain);
         int rbNumByPower = DLScheduleCalaculateTool.CalaCountRBByRemaindPower(user, base.CurrentCarrier, base.Tag);
         if (this.IsCanScheduleUser(user, rbNeed, rbNumByPower))
         {
             user.MacTBS = voicePacketSize;
             SimulationUser user2 = (SimulationUser) user;
             user2.PreScheduleTime = ttiNum;
             user.ServiceCount = (short) (user.ServiceCount + 1);
             user.MeasureSinr = pdschSinr;
             user.FinalSinr = pdschSinr;
             user.DlMcsEff = mcsBySinr;
             user2.VoiceContinueLost = 0;
             user.PreScheduleTime = ttiNum;
             userTag.RbNeed = rbNeed;
             user.State = State.Service;
             base.CurrentCarrier.DlVoiceServiceUserList.Add(user);
             base.CurrentCarrier.DlVoiceWaitUserList.Remove(user);
             DLCarrierTag tag = base.Tag;
             tag.UsableRbNumPerTti = (byte) (tag.UsableRbNumPerTti - Convert.ToByte(rbNeed));
             return true;
         }
     }
     return false;
 }
コード例 #6
0
ファイル: BaseUserList.cs プロジェクト: xiaoyj/Space
 public abstract void AddUser(IDlScheduleUser user, DLUserTag usertag);
コード例 #7
0
ファイル: NewAccessUserComparer.cs プロジェクト: xiaoyj/Space
 public override float GetPriority(IDlScheduleUser user, DLUserTag usertag)
 {
     int servicePriority = SimulationTools.GetServicePriority(user.LTEUser.Service);
     return ((user.LTEUser.Priority * servicePriority) * (user.DlRsSinr - user.BestServiceCarrier.DLRsSinrAccessThreshold));
 }
コード例 #8
0
ファイル: ICICOpenAllotMethod.cs プロジェクト: xiaoyj/Space
 private void AllotResourceWhileEdgeRbNotEnough(IDlScheduleUser user, DLUserTag userTag, int rbNeed)
 {
     int allotCount = rbNeed - this.resource.RbEdgeList.Count;
     this.AllotRbList(user, this.resource.RbEdgeList, this.resource.RbEdgeList.Count);
     if (user.SfSbStroNbr == null)
     {
         this.AllotRbList(user, this.resource.RbCenterList, allotCount, true);
     }
     else
     {
         this.AllotResourceWhileSfSbStroNbrNotNull(user, userTag, allotCount);
     }
 }
コード例 #9
0
ファイル: ICICOpenAllotMethod.cs プロジェクト: xiaoyj/Space
 private void AllotResourceWhileSfSbStroNbrNotNull(IDlScheduleUser user, DLUserTag userTag, int centerNeedRbCount)
 {
     if (user.SfSbSsSsStroNbr == null)
     {
         this.RobCenterRbNotEqualNbrEdgeRb(user, this.resource.RbCenterList, centerNeedRbCount);
     }
     else
     {
         this.AllotRbList(user, this.resource.RbCenterList, centerNeedRbCount, this.isHighCarrier((IDlScheduleCarrier) user.SfSbStroNbr));
     }
 }