OSDN Git Service

87839e111da98cda4b7d9dad50bd030e41f45d98
[wordring-tm/wordring-tm.git] / proxy / tmsocket.h
1 #ifndef TMSOCKET_H
2 #define TMSOCKET_H
3
4 #include "html.h"
5 #include "text.h"
6 #include "tmtext.h"
7
8 #include <QObject>
9 #include <QPointer>
10
11 #include <QString>
12 #include <QList>
13 #include <QMap>
14 #include <QJsonArray>
15
16 #include <QThread>
17 #include <QMutex>
18
19 #include <QWebSocket>
20 #include <QWebSocketServer>
21
22 QT_BEGIN_NAMESPACE
23 //class QSettings;
24 QT_END_NAMESPACE
25
26 class Settings;
27
28 namespace TM
29 {
30
31 class Service;
32 class EditorWidget;
33
34 class SocketConnection : public QObject
35 {
36         Q_OBJECT
37
38 public:
39         typedef QPointer<SocketConnection> pointer;
40         typedef QMap<int, TextSegment::pointer> segment_map_type;
41         typedef segment_map_type::iterator segment_map_iterator;
42
43 public:
44         SocketConnection(Settings *settings, Service *service,
45                                         EditorWidget *editor_widget, QWebSocket *socket);
46         virtual ~SocketConnection();
47
48         QWebSocket* socket();
49         void send_message(QString const &message);
50         void send_message(QJsonObject const &json);
51
52         void set_edit_mode(bool edit_mode);
53
54         void save_sentence(int segment_id, int index);
55         void remove_sentence(int segment_id, int index);
56
57         void sentence_found(
58                         int segment_id, int index, sentence_data_type::pointer result);
59         void sentence_inserted(int segment_id, int index,
60                                                         quint32 source_id, quint32 target_id);
61
62 signals:
63         //void editCmd(int id, QString html);
64
65 public slots:
66         void changeEditMode(bool edit_mode);
67         void changeLanguage();
68
69 private:
70         void set_segment(int segment_id, QString html);
71
72         void do_edit_segment(QJsonObject const &json);
73         void do_focus(QJsonObject const &json);
74         void do_blur(QJsonObject const &json);
75         void do_load(QJsonObject const &json);
76         void do_load_segment(QJsonObject const &json);
77
78         Text::pointer to_text(HtmlRange range) const;
79         TextSegment::pointer find_segment(int segment_id);
80         void insert_segment(int segment_id, TextSegment::pointer segment);
81
82 private slots:
83         void onTextMessageReceived(QString const &message);
84         void onBinaryMessageReceived(QByteArray const &message);
85
86 private:
87         Settings *m_settings;
88         Service *m_service;
89         QMutex m_mutex;
90
91         QUrl m_url; /*!< 読み込んでいるウェブページのURL */
92         int m_site_id;
93
94         bool m_edit_mode;
95         int m_scode;
96         int m_target_language_code;
97
98         EditorWidget *m_editor_widget;
99
100         QMap<int, TextSegment::pointer> m_segments;
101         TextSegment::pointer m_current_segment;
102 };
103
104 class SocketServer : public QObject
105 {
106         Q_OBJECT
107 public:
108         SocketServer(Settings *settings, Service* service,
109                                 EditorWidget *editor_widget, QObject *parent);
110         ~SocketServer();
111
112         quint16 port() const;
113
114 signals:
115
116 public slots:
117         void abort();
118         void onNewConnection();
119         void onDisconnected();
120
121 private:
122         void attachConnections(QWebSocket* socket);
123         void detachConnections(QWebSocket* socket);
124 signals:
125
126 private:
127         Settings *m_settings;
128         Service *m_service;
129
130         QWebSocketServer *m_server;
131         QList<QWebSocket*> m_sockets;
132
133         EditorWidget *m_editor_widget;
134 };
135
136 Q_DECLARE_METATYPE(SocketConnection::pointer)
137
138 } // namespace TM
139
140 #endif // TMSOCKET_H