OSDN Git Service

Editorのデータ構造変更前、一時保存。
[wordring-tm/wordring-tm.git] / proxy / tmsocket.h
index 7c69617..16e189e 100644 (file)
@@ -8,20 +8,26 @@
 
 #include <QString>
 #include <QList>
+#include <QMap>
+#include <QJsonArray>
 
+#include <QThread>
 #include <QMutex>
 
 #include <QWebSocket>
 #include <QWebSocketServer>
 
 QT_BEGIN_NAMESPACE
-class QSettings;
+//class QSettings;
 QT_END_NAMESPACE
 
+class Settings;
+
 namespace TM
 {
 
-class Widget;
+class Service;
+class EditorWidget;
 
 class HtmlData : public RangeData
 {
@@ -42,11 +48,12 @@ private:
        HtmlNode m_node;
 };
 
+/*!
+ * \brief HtmlRangeから構造化テキストに変換するためのクラスです。
+ */
 class TextConverter
 {
 public:
-       //TextConverter();
-
        Text::pointer to_text(HtmlRange range);
        Text::pointer stuff_text(Text::pointer parent, QString const &string);
 
@@ -58,22 +65,80 @@ private:
        int m_state;
 };
 
+class TextSentence
+{
+public:
+       typedef std::shared_ptr<TextSentence> pointer;
+
+private:
+       TextSentence(Text::pointer source_sentence);
+public:
+       Text::pointer source_sentence();
+       Text::pointer target_sentence();
+       void set_terget_sentence(Text::pointer target_sentence);
+
+       QJsonArray link_data();
+       void set_link_data(QJsonArray json);
+
+       static pointer create(Text::pointer source_sentence);
+
+       QString debug_dump();
+
+private:
+       Text::pointer m_source_sentence;
+       Text::pointer m_target_sentence;
+       QJsonArray m_link_data;
+};
+
+class TextSegment
+{
+public:
+       typedef std::shared_ptr<TextSegment> pointer;
+       typedef QList<TextSentence::pointer> storage_type;
+       typedef storage_type::iterator iterator;
+
+private:
+       TextSegment(Service *service, int scode, int segment_id, QString source);
+public:
+
+       int segment_id() const;
+
+       TextSentence::pointer at(int index);
+       iterator begin();
+       iterator end();
+
+       static pointer create(
+                       Service *service, int scode, int segment_id, QString source);
+
+private:
+       int m_segment_id; /*!< data-wordring-segmentの値によるセグメントのID。 */
+       HtmlDocument m_document; /*!< セグメントのHtmlDocument。 */
+       Text::pointer m_text; /*!< セグメントのHtmlData付テキスト。 */
+
+       storage_type m_sentences; /*!< 編集用センテンスのリスト。 */
+};
+
 class SocketConnection : public QObject
 {
        Q_OBJECT
 
 public:
-       SocketConnection(Widget *widget, QWebSocket *socket);
+       typedef QMap<int, TextSegment::pointer> segment_map_type;
+       typedef segment_map_type::iterator segment_map_iterator;
+
+public:
+       SocketConnection(Settings *settings, Service *service,
+                                       EditorWidget *editor_widget, QWebSocket *socket);
        virtual ~SocketConnection();
 
-       //quint16 port() const;
        QWebSocket* socket();
        void send_message(QString const &message);
        void send_message(QJsonObject const &json);
 
        void set_edit_mode(bool edit_mode);
-       //void set_source_language(int code);
-       //void set_target_language(int code);
+
+       void save_sentence(int segment_id, int index,
+                                               Text::pointer target_sentence, QJsonArray link);
 
 signals:
        void editCmd(int id, QString html);
@@ -88,36 +153,43 @@ private:
        void do_load(QJsonObject const &json);
 
        Text::pointer to_text(HtmlRange range) const;
+       TextSegment::pointer find_segment(int segment_id);
+       void insert_segment(int segment_id, TextSegment::pointer segment);
 
 private slots:
        void onTextMessageReceived(QString const &message);
        void onBinaryMessageReceived(QByteArray const &message);
 
 private:
+       Settings *m_settings;
+       Service *m_service;
+
        QMutex m_mutex;
 
        bool m_edit_mode;
        int m_source_language;
        int m_target_language;
 
-       Widget *m_widget;
+       EditorWidget *m_editor_widget;
 
-       HtmlDocument m_document; /*!< 現在処理中のHTML文書パラグラフを保持 */
-       Text::pointer m_text; /*!< HtmlData付のパラグラフをテキストとして保持 */
-       //QJsonArray m_json; /*!<  */
+       QMap<int, TextSegment::pointer> m_segments;
+       TextSegment::pointer m_current_segment;
 };
 
 class SocketServer : public QObject
 {
        Q_OBJECT
 public:
-       SocketServer(QSettings *settings, Widget *widget, QObject *parent);
+       SocketServer(Settings *settings, Service* service,
+                               EditorWidget *editor_widget, QObject *parent);
+       ~SocketServer();
 
        quint16 port() const;
 
 signals:
 
 public slots:
+       void abort();
        void onNewConnection();
        void onDisconnected();
 
@@ -127,9 +199,13 @@ private:
 signals:
 
 private:
-       QSettings *m_settings;
+       Settings *m_settings;
+       Service *m_service;
+
        QWebSocketServer *m_server;
-       Widget *m_widget;
+       QList<QWebSocket*> m_sockets;
+
+       EditorWidget *m_editor_widget;
 };
 
 } // namespace TM