Пример #1
0
 public Protocol.DeskInfo GetInfo()
 {
     Protocol.DeskInfo result = new Protocol.DeskInfo();
     result.Seats  = new List <Protocol.SeatInfo>();
     result.DeskID = this.ID;
     result.Name   = this.Name;
     for (int i = 0; i < Seats.Count; i++)
     {
         Interfaces.ISeat seat = Seats[i];
         result.Seats.Add(seat.GetInfo());
     }
     return(result);
 }
Пример #2
0
        public string In(Interfaces.IUserAgent user, int seatIndex)
        {
            Protocol.Result result = new Protocol.Result();
            result.Success = true;

            if (user.Desk != null)
            {
                user.Desk.Exit(user);
            }
            for (int i = 0; i < Seats.Count; i++)
            {
                Interfaces.ISeat seat = Seats[i];
                if (seat.Index == seatIndex)
                {
                    lock (seat)
                    {
                        if (seat.User == null || seat.User == user)
                        {
                            if (user.Seat != null)
                            {
                                user.Seat.User = null;
                            }
                            seat.User = user;
                            user.Desk = this;
                            user.Seat = seat;
                            Room.UpdateDesk(this);
                        }
                        else
                        {
                            result.Success = false;
                            return("位置已经被占用!");
                        }
                    }
                }
            }
            lock (Visitors)
            {
                if (!Visitors.Contains(user))
                {
                    Visitors.Add(user);
                }
                System.Threading.Interlocked.Increment(ref mVersion);
            }
            return(null);
        }
Пример #3
0
 public ArraySegment <IUserAgent> GetAgents()
 {
     if (mUserSegment.Version != Version)
     {
         lock (Visitors)
         {
             mUserSegment.Reset();
             foreach (IUserAgent agent in Visitors)
             {
                 mUserSegment.Enqueue(agent);
             }
             for (int i = 0; i < Seats.Count; i++)
             {
                 Interfaces.ISeat seat = Seats[i];
                 if (seat.User != null)
                 {
                     mUserSegment.Enqueue(seat.User);
                 }
             }
             mUserSegment.Version = Version;
         }
     }
     return(mUserSegment.GetAgents());
 }
Пример #4
0
 public void Add(Interfaces.ISeat seat)
 {
     Seats.Add(seat);
 }