6 #include "tmdatabase.h"
36 Dispatcher() : m_token_count(0) { }
38 int size() const { return m_map.size(); }
40 void clear() { m_map.clear(); }
45 if(m_tokens.isEmpty()) token = ++m_token_count;
46 else token = m_tokens.dequeue();
48 m_map.insert(token, p);
55 QMap<int, T>::iterator it = m_map.find(token);
60 m_tokens.append(it.key());
72 class WordringConnection : public QObject
76 WordringConnection(Settings *settings, Service *service);
78 bool find_sentence(QString site_name, int scode, int tcode,
79 QString ssentence, qint32 token);
81 bool insert_sentence(QString site_name, int scode, int tcode,
82 QString ssentence, QString tsentence, QByteArray word_link);
83 bool remove_sentence(QString site_name, int scode, int tcode,
88 void onDisconnected();
89 void onError(QAbstractSocket::SocketError e);
91 void onTextMessageReceived(QString const &message);
92 void onBinaryMessageReceived(QByteArray const &message);
98 void sentence_found(QJsonObject json);
99 void sentence_not_found(QJsonObject json);
102 Settings *m_settings;
104 QWebSocket *m_socket;
106 QQueue<QByteArray> m_requests;
107 int m_request_limit; /*!< 待機できるリクエストの制限値 */
110 class Service : public QObject
114 struct dispatcher_data_type
116 SocketConnection::pointer connection;
122 Service(Settings *settings, QObject *parent = 0);
126 void setup_crc_table();
127 quint32 crc32(QString const &string);
128 quint32 crc32(int code, QString const &string);
131 void load_languages(QString const &path);
133 Text::pointer divide_into_sentences(int code, QString string);
134 Text::pointer divide_into_words(int code, Text::pointer sentence);
137 quint32 find_site_id(QString host_name);
139 void insert_sentence(int segment_id, int index,
140 QString site_name, int scode, int tcode,
141 TextSentence::pointer sentence, SocketConnection::pointer socket);
142 void remove_sentence(QString site_name, int scode, int tcode,
143 TextSentence::pointer sentence);
145 void find_sentence(int segment_id, int index,
146 QString site_name, int scode, int tcode,
147 TextSentence::pointer sentence,
148 SocketConnection::pointer socket);
150 sentence_data_type::pointer stuff_sentence_data(int code, Text::pointer text);
151 sentence_data_type::pointer stuff_source_sentence_data(
152 int code, Text::pointer text, quint32 crc, quint32 previous_crc,
157 * \brief 言語プラグインが読み込まれたときに発火するシグナルです。
158 * \param code 言語コードです。
160 * \param icon 言語を表現するアイコンです。
162 void languageLoaded(int code, QString name, QIcon icon);
166 void sentence_found(sentence_data_type::pointer result, qint32 token);
167 void sentence_not_found(QString site_name, qint32 scode, qint32 tcode,
168 QString ssentence, qint32 token);
169 void sentence_inserted(quint32 source_id, quint32 target_id, qint32 token);
173 void sentence_found(QString site, qint32 scode, qint32 tcode,
174 QString ssentence, QString tsentence, QByteArray json,
175 quint32 user_id, qint32 token);
176 void sentence_not_found(quint32 token);
178 void do_wordring_disconnected();
181 Settings *m_settings;
182 quint32 m_crc_table[256];
184 QMap<int, Language*> m_languages;
186 QThread *m_database_thread;
187 Database *m_database;
188 Dispatcher<dispatcher_data_type> m_database_dispatcher;
190 WordringConnection *m_wordring;
191 Dispatcher<dispatcher_data_type> m_wordring_dispatcher;
192 int m_wordring_dispatcher_limit;
197 #endif // TMSERVICE_H