@@ -924,11 +924,11 @@ void CMenus::RenderCrossChat(CUIRect MainView)
924924 // m_CrossChatMessages.emplace_back("[Server]: Добро пожаловать в CrossChat!");
925925
926926 char aBuf[64 ];
927- if (GameClient ()->m_WebSocket .IsConnected () )
927+ if (GameClient ()->m_WebSocket .m_IsConnected )
928928 str_format (aBuf, sizeof (aBuf), " [Server]: Welcome to chat, %s" , g_Config.m_PlayerName );
929929 else
930930 str_format (aBuf, sizeof (aBuf), " [Offline]: Try again later" );
931- GameClient ()->m_WebSocket .AddMessage (aBuf);
931+ GameClient ()->m_WebSocket .m_WebSocketChat . AddMessage (aBuf);
932932 }
933933
934934 MainView.Draw (ColorRGBA (0 , 0 , 0 , 0 .5f ), IGraphics::CORNER_ALL, 5 .0f );
@@ -955,7 +955,7 @@ void CMenus::RenderCrossChat(CUIRect MainView)
955955 TextRender ()->SetFontPreset (EFontPreset::ICON_FONT);
956956
957957 CButtonContainer SReconnectButton;
958- bool Connected = GameClient ()->m_WebSocket .IsConnected () ;
958+ bool Connected = GameClient ()->m_WebSocket .m_IsConnected ;
959959
960960 ColorRGBA ButtonColor = Connected ? ColorRGBA (1 .0f , 0 .0f , 0 .0f , 0 .25f ) // красная при подключении
961961 :
@@ -974,10 +974,6 @@ void CMenus::RenderCrossChat(CUIRect MainView)
974974 ButtonColor))
975975 {
976976 GameClient ()->m_WebSocket .SocketConnect ();
977- if (Connected)
978- {
979- GameClient ()->m_WebSocket .OnInit ();
980- }
981977 }
982978 static bool s_settings_open = false ;
983979
@@ -1004,10 +1000,16 @@ void CMenus::RenderCrossChat(CUIRect MainView)
10041000 LeftBar.HSplitBottom (LeftBar.h / 3 , &LeftBar, &SettingsRect);
10051001 SettingsRect.Draw (ColorRGBA (0 .0f , 0 .5f , 1 .0f , 0 .25f ), IGraphics::CORNER_ALL, 3 .0f );
10061002 TextRender ()->Text (SettingsRect.x + 5 .0f , SettingsRect.y + 5 .0f , 12 .0f , FONT_ICON_GEAR, -1 );
1003+ TextRender ()->SetFontPreset (EFontPreset::DEFAULT_FONT);
1004+ SettingsRect.VMargin (10 .0f , &SettingsRect);
1005+ SettingsRect.HSplitTop (SettingsRect.h / 5 , nullptr , &SettingsRect);
1006+
1007+
1008+ SettingsRect.HSplitTop (20 .0f , &Button, &SettingsRect);
1009+ if (DoButton_CheckBox (&g_Config.m_ClCrossChatAutoConnect , Localize (" Connect on startup" ), g_Config.m_ClCrossChatAutoConnect , &Button))
1010+ g_Config.m_ClCrossChatAutoConnect ^= 1 ;
10071011
1008- SettingsRect.HSplitTop (10 .0f , &Button, &SettingsRect);
1009- Ui ()->DoLabel (&Button, Localize (" Settings" ), FontSize, TEXTALIGN_ML);
1010- Button.HSplitTop (5 .0f , nullptr , &Button);
1012+
10111013 }
10121014
10131015 TextRender ()->SetFontPreset (EFontPreset::DEFAULT_FONT);
@@ -1027,40 +1029,38 @@ void CMenus::RenderCrossChat(CUIRect MainView)
10271029 const char *pText = s_ChatInput.GetString ();
10281030 int64_t Now = time_get ();
10291031
1030- if (GameClient ()->m_WebSocket .IsConnected ())
1031- {
1032- if (!GameClient ()->m_WebSocket .m_IsTyping )
1032+
1033+ if (!GameClient ()->m_WebSocket .m_WebSocketChat .m_IsTyping )
10331034 {
1034- GameClient ()->m_WebSocket .m_IsTyping = true ;
1035- GameClient ()->m_SocketIO . socket ()-> emit ( " typing_start " , sio::string_message::create ( Client ()-> PlayerName ()) );
1035+ GameClient ()->m_WebSocket .m_WebSocketChat . m_IsTyping = true ;
1036+ GameClient ()->m_WebSocket . m_WebSocketChat . SendTypingState ( true );
10361037 }
10371038
1038- GameClient ()->m_WebSocket .m_LastTypeTime = Now;
1039- }
1039+ GameClient ()->m_WebSocket .m_WebSocketChat . m_LastTypeTime = Now;
1040+
10401041 }
10411042
1042- if (GameClient ()->m_WebSocket .m_IsTyping && time_get () - GameClient ()->m_WebSocket .m_LastTypeTime > time_freq () * 2 )
1043+ if (GameClient ()->m_WebSocket .m_WebSocketChat . m_IsTyping && time_get () - GameClient ()->m_WebSocket . m_WebSocketChat .m_LastTypeTime > time_freq () * 2 )
10431044 {
1044- GameClient ()->m_WebSocket .m_IsTyping = false ;
1045- if (GameClient ()->m_WebSocket .IsConnected ())
1046- GameClient ()->m_SocketIO .socket ()->emit (" typing_stop" , sio::string_message::create (Client ()->PlayerName ()));
1045+ GameClient ()->m_WebSocket .m_WebSocketChat .m_IsTyping = false ;
1046+ GameClient ()->m_WebSocket .m_WebSocketChat .SendTypingState (false );
10471047 }
10481048
10491049 if (Input ()->KeyPress (KEY_RETURN) || Input ()->KeyPress (KEY_KP_ENTER))
10501050 {
10511051 const char *pText = s_ChatInput.GetString ();
10521052 if (pText && pText[0 ])
10531053 {
1054- GameClient ()->m_WebSocket .SendChatMessage (pText);
1054+ GameClient ()->m_WebSocket .m_WebSocketChat . SendChatMessage (pText);
10551055
1056- s_ChatHistory.push_back (pText);
1056+ s_ChatHistory.emplace_back (pText);
10571057 s_HistoryIndex = -1 ;
10581058 s_ChatInput.Clear ();
10591059
1060- if (GameClient ()->m_WebSocket .m_IsTyping )
1060+ if (GameClient ()->m_WebSocket .m_WebSocketChat . m_IsTyping )
10611061 {
1062- GameClient ()->m_WebSocket .m_IsTyping = false ;
1063- GameClient ()->m_SocketIO . socket ()-> emit ( " typing_stop " , sio::string_message::create ( Client ()-> PlayerName ()) );
1062+ GameClient ()->m_WebSocket .m_WebSocketChat . m_IsTyping = false ;
1063+ GameClient ()->m_WebSocket . m_WebSocketChat . SendTypingState ( false );
10641064 }
10651065 }
10661066 }
@@ -1094,15 +1094,15 @@ void CMenus::RenderCrossChat(CUIRect MainView)
10941094 }
10951095 }
10961096
1097- std::lock_guard<std::mutex> lock (GameClient ()->m_WebSocket .m_OnlinePlayersMutex );
1097+ std::lock_guard<std::mutex> lock (GameClient ()->m_WebSocket .m_WebSocketChat . m_OnlinePlayersMutex );
10981098 float yOnline = LeftBar.y + 10 .0f ;
1099- for (const auto &player : GameClient ()->m_WebSocket .m_OnlinePlayers )
1099+ for (const auto &player : GameClient ()->m_WebSocket .m_WebSocketChat . m_OnlinePlayers )
11001100 {
11011101 TextRender ()->Text (LeftBar.x + 5 .0f , yOnline, 12 .0f , player.c_str (), -1 );
11021102 yOnline += 15 .0f ;
11031103 }
11041104
1105- std::vector<CWebSocket ::SChatMessage> Messages = GameClient ()->m_WebSocket .GetMessages ();
1105+ std::vector<CWebSocketChat ::SChatMessage> Messages = GameClient ()->m_WebSocket . m_WebSocketChat .GetMessages ();
11061106 const float LineHeight = 12 .0f ;
11071107 float y = ChatView.y + ChatView.h - LineHeight;
11081108
@@ -1124,19 +1124,19 @@ void CMenus::RenderCrossChat(CUIRect MainView)
11241124 }
11251125
11261126 {
1127- std::lock_guard<std::mutex> lock (GameClient ()->m_WebSocket .m_TypingMutex );
1128- if (!GameClient ()->m_WebSocket .m_TypingUsers .empty ())
1127+ std::lock_guard<std::mutex> lock (GameClient ()->m_WebSocket .m_WebSocketChat . m_TypingMutex );
1128+ if (!GameClient ()->m_WebSocket .m_WebSocketChat . m_TypingUsers .empty ())
11291129 {
11301130 std::string TypingText;
1131- size_t Count = GameClient ()->m_WebSocket .m_TypingUsers .size ();
1131+ size_t Count = GameClient ()->m_WebSocket .m_WebSocketChat . m_TypingUsers .size ();
11321132
11331133 if (Count == 1 )
11341134 {
1135- TypingText = *GameClient ()->m_WebSocket .m_TypingUsers .begin () + " is typing..." ;
1135+ TypingText = *GameClient ()->m_WebSocket .m_WebSocketChat . m_TypingUsers .begin () + " is typing..." ;
11361136 }
11371137 else if (Count == 2 )
11381138 {
1139- auto it = GameClient ()->m_WebSocket .m_TypingUsers .begin ();
1139+ auto it = GameClient ()->m_WebSocket .m_WebSocketChat . m_TypingUsers .begin ();
11401140 std::string first = *it++;
11411141 std::string second = *it;
11421142 TypingText = first + " and " + second + " are typing..." ;
0 commit comments