b6b2996b76e1b0f0e403b4be40430a445bc0873c
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

1) /* Blinker
Stefan Schuermans update copyright years

Stefan Schuermans authored 10 years ago

2)    Copyright 2011-2014 Stefan Schuermans <stefan@blinkenarea.org>
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

3)    Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
4)    a blinkenarea.org project */
5) 
6) #ifndef BLINKER_LOVELETTER_H
7) #define BLINKER_LOVELETTER_H
8) 
9) #include <list>
10) #include <map>
11) #include <string>
12) 
13) #include <BlinkenLib/BlinkenMovie.h>
14) 
15) #include "Directory.h"
16) #include "File.h"
17) #include "InStreamFile.h"
18) #include "ListTracker.h"
19) #include "Mgrs.h"
20) #include "Module.h"
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

21) #include "NameFile.h"
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

22) #include "OpConn.h"
23) #include "OpConnIf.h"
24) #include "OpReqIf.h"
25) #include "OutStreamFile.h"
26) #include "StreamRecv.h"
27) #include "Time.h"
28) #include "TimeCallee.h"
29) 
30) namespace Blinker {
31) 
32) /// on demand movie player
33) class Loveletter: public Module, public OpReqIf, public StreamRecv,
34)                   public TimeCallee
35) {
36) protected:
37)   /// movie
38)   class Movie;
39) 
40)   /// movie tracker
41)   typedef ListTracker<Loveletter, Movie, File> MovieTracker;
42) 
43)   /// movie iterator
44)   typedef MovieTracker::ListIt MovieIt;
45) 
46)   /// map from movie number to movie
47)   typedef std::map<std::string, Movie *> MovieMap;
48) 
49) public:
50)   /**
51)    * @brief constructor
52)    * @param[in] name module name
53)    * @param[in] mgrs managers
54)    * @param[in] dirBase base directory
55)    */
56)   Loveletter(const std::string &name, Mgrs &mgrs, const Directory &dirBase);
57) 
58)   /// virtual destructor
59)   virtual ~Loveletter();
60) 
61) private:
62)   /// copy constructor disabled
63)   Loveletter(const Loveletter &that);
64) 
65)   /// assignment operator disabled
66)   const Loveletter & operator=(const Loveletter &that);
67) 
68) public:
69)   /// check for update of configuration
70)   virtual void updateConfig();
71) 
72)   /**
73)    * @brief set current frame
74)    * @param[in] stream stream name
75)    * @param[in] pFrame current frame (NULL for none)
76)    */
77)   virtual void setFrame(const std::string &stream, stBlinkenFrame *pFrame);
78) 
79)   /// callback when requested time reached
80)   virtual void timeCall();
81) 
82)   /**
83)    * @brief check if accepting new operator connction is possible
84)    * @param[in] name operator interface name
85)    * @return if accepting new connection is possible
86)    */
87)   virtual bool acceptNewOpConn(const std::string &name);
88) 
89)   /**
90)    * @brief new operator connection
91)    * @param[in] name operator interface name
92)    * @param[in] pConn operator connection object
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

93)    *
94)    * The new connection may not yet be used for sending inside this callback.
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

95)    */
96)   virtual void newOpConn(const std::string &name, OpConn *pConn);
97) 
98)   /**
99)    * @brief key command received on operator connection
100)    * @param[in] pConn operator connection object
101)    * @param[in] key key that was pressed
102)    */
103)   virtual void opConnRecvKey(OpConn *pConn, char key);
104) 
105)   /**
106)    * @brief play command received on operator connection
107)    * @param[in] pConn operator connection object
108)    * @param[in] sound name of sound to play
109)    */
110)   virtual void opConnRecvPlay(OpConn *pConn, const std::string &sound);
111) 
112)   /**
113)    * @brief operator connection is closed
114)    * @param[in] pConn operator connection object
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

115)    *
116)    * The connection may not be used for sending any more in this callback.
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

117)    */
118)   virtual void opConnClose(OpConn *pConn);
119) 
120) protected:
121)   /// check if current movie changed and react
122)   void checkCurChanged();
123) 
124)   /// process current frame
125)   void procFrame();
126) 
127)   /// send current frame to output stream
128)   void sendFrame();
129) 
130)   /// close current operator connection
131)   void closeOpConn();
132) 
133)   /// start playing movie (indictaed by m_movieNumber)
134)   void startPlaying();
135) 
136)   /// stop playing movie
137)   void stopPlaying();
138) 
139) protected:
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

140)   NameFile      m_fileSound;      ///< file containing sound name
Stefan Schuermans implemented loveletter module

Stefan Schuermans authored 12 years ago

141)   OutStreamFile m_fileOutStream;  ///< output stream name file
142)   InStreamFile  m_fileHaltStream; /**< halt stream name file
143)                                        (playing halts if stream active) */
144)   MovieTracker  m_movieTracker;   ///< current movies
145)   MovieMap      m_movieMap;       ///< map from movie number to movie
146)   bool          m_curValid;       ///< if there is a current frame
147)   Movie         *m_pCurMovie;     ///< current movie or NULL
148)   int           m_curFrame;       ///< current frame in movie
149)   bool          m_curChange;      ///< current movie changed
150)   bool          m_halted;         ///< if playing is halted
151)   Time          m_remainTime;     /**< remaining time of current frame
152)                                        (valid if m_curValid && m_halted) */
153)   Time          m_nextTime;       /**< when to show next frame
154)                                        (valid if m_curValid && !m_halted) */
155)   OpConn        *m_pOpConn;       ///< current operator connection or NULL
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

156)   bool          m_sendPlay;       ///< if sending play request needed