private bool HandleNewBalloon(NewBalloonMessage nbm) { if(m_bubbles.ContainsKey(nbm.ObjectID)) { // Balloon already present ! Trace.WriteLine(String.Format("Balloon {0} already present!", nbm.ObjectID)); return true; } if(m_screens.Count == 0) { // No screen to display balloon -- sad return true; } ServerBalloon balloon = new ServerBalloon(nbm.ObjectID); m_bubbles[nbm.ObjectID] = balloon; // choose a random screen int screen_idx = m_random.Next(m_screens.Count); // Notify screen with new ballon message balloon.Screen = m_screens[screen_idx]; balloon.Screen.Connection.SendMessage(nbm); return true; }
private ServerBalloon CreateBalloon() { lock(m_bubbles) { int BalloonID = m_nextBalloonID++; ServerBalloon b = new ServerBalloon(BalloonID); m_bubbles[BalloonID] = b; return b; } }
private bool HandleNewBalloon(NewBalloonMessage nbm) { if(m_bubbles.ContainsKey(nbm.BalloonID)) { // Balloon already present ! Trace.WriteLine(String.Format("Balloon {0} already present!", nbm.BalloonID)); return true; } if(m_screens.Count == 0) { // No screen to display balloon -- sad return true; } ServerBalloon balloon = new ServerBalloon(nbm.BalloonID); m_bubbles[nbm.BalloonID] = balloon; if(m_screens.Count > 0 ) { // choose a random screen int screen_idx = m_random.Next(m_screens.Count); Screen screen = null; if((0 <= screen_idx) || (screen_idx < m_screens.Count)) { screen = m_screens[screen_idx]; } if(screen == null) { Trace.WriteLine(String.Format( "Warning: random screen ID out of bounds: {0} ({1} screens)", screen_idx, m_screens.Count)); return true; } balloon.Screen = screen; screen.Balloons.Add(nbm.BalloonID, balloon); screen.Connection.SendMessage(nbm); } else { balloon.Screen = null; } return true; }