mirror of
				https://github.com/DarkflameUniverse/DarkflameServer.git
				synced 2025-10-31 04:32:06 +00:00 
			
		
		
		
	wip: test chat client
This commit is contained in:
		| @@ -301,6 +301,7 @@ add_subdirectory(dWorldServer) | ||||
| add_subdirectory(dAuthServer) | ||||
| add_subdirectory(dChatServer) | ||||
| add_subdirectory(dMasterServer) # Add MasterServer last so it can rely on the other binaries | ||||
| add_subdirectory(dChatClient) | ||||
|  | ||||
| target_precompile_headers( | ||||
| 	dZoneManager PRIVATE | ||||
|   | ||||
							
								
								
									
										2
									
								
								dChatClient/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								dChatClient/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| add_executable(ChatClient ChatClient.cpp) | ||||
| target_link_libraries(ChatClient raknet dCommon) | ||||
							
								
								
									
										93
									
								
								dChatClient/ChatClient.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								dChatClient/ChatClient.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,93 @@ | ||||
| #include <iostream> | ||||
| #include <RakPeerInterface.h> | ||||
| #include <RakNetworkFactory.h> | ||||
| #include <MessageIdentifiers.h> | ||||
| #include <BitStream.h> | ||||
|  | ||||
| #include "eConnectionType.h" | ||||
| #include "eChatMessageType.h" | ||||
| #include "dCommonVars.h" | ||||
|  | ||||
| static constexpr uint16_t CHAT_PORT = 2005; | ||||
| static const char PASS_INTERNAL[16] = "3.25 DARKFLAME1"; | ||||
| static const char PASS_EXTERNAL[9] = "3.25 ND1"; | ||||
|  | ||||
| int main(int argc, const char** argv) { | ||||
| 	std::cout << "Hello World!" << std::endl; | ||||
|  | ||||
| 	SocketDescriptor socketDescriptor(0, 0); | ||||
| 	RakPeerInterface* peer = RakNetworkFactory::GetRakPeerInterface(); | ||||
| 	uint16_t maxConnections = 1; // one outgoing | ||||
| 	bool useEncryption = true; | ||||
|  | ||||
| 	if (!peer) { | ||||
| 		std::cerr << "Failed to get RakPeer interface!" << std::endl; | ||||
| 		return 1; | ||||
| 	} | ||||
| 	if (!peer->Startup(maxConnections, 10, &socketDescriptor, 1)) { | ||||
| 		std::cerr << "Failed to startup rak peer interface!" << std::endl; | ||||
| 		return 1; | ||||
| 	} | ||||
|  | ||||
| 	if (useEncryption) peer->InitializeSecurity(NULL, NULL, NULL, NULL); | ||||
|  | ||||
| 	if (!peer->Connect("localhost", CHAT_PORT, PASS_EXTERNAL, 8)) { | ||||
| 		std::cerr << "Failed to initiate connection to chat server" << std::endl; | ||||
| 		return 1; | ||||
| 	} | ||||
|  | ||||
| 	// Establish connection | ||||
| 	Packet* packet; | ||||
| 	bool connected = false; | ||||
| 	SystemAddress remote; | ||||
|  | ||||
| 	while (!connected) { | ||||
| 		packet = peer->Receive(); | ||||
| 		if (!packet) continue; | ||||
|  | ||||
| 		uint8_t packet_id = packet->data[0]; | ||||
| 		switch (packet_id) { | ||||
| 		case ID_INVALID_PASSWORD: | ||||
| 			std::cerr << "Password invalid" << std::endl; | ||||
| 			return 1; | ||||
| 		case ID_CONNECTION_REQUEST_ACCEPTED: | ||||
| 			std::cout << "Connection accepted" << std::endl; | ||||
| 			remote = packet->systemAddress; | ||||
| 			connected = true; | ||||
| 			break; | ||||
| 		default: | ||||
| 			std::cout << "Packet: " << static_cast<uint32_t>(packet_id) << std::endl; | ||||
| 		} | ||||
| 		peer->DeallocatePacket(packet); | ||||
| 	} | ||||
|  | ||||
| 	std::cout << "Starting tests" << std::endl; | ||||
|  | ||||
| 	//Notify chat about it | ||||
| 	CBITSTREAM; | ||||
| 	BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, eChatMessageType::GM_ANNOUNCE); | ||||
|  | ||||
| 	std::string title = "My Title"; | ||||
| 	std::string message = "My Message"; | ||||
|  | ||||
| 	bitStream.Write<uint32_t>(title.size()); | ||||
| 	bitStream.Write(title.c_str(), title.size()); | ||||
| 	bitStream.Write<uint32_t>(message.size()); | ||||
| 	bitStream.Write(message.c_str(), message.size()); | ||||
|  | ||||
| 	peer->Send(&bitStream, SYSTEM_PRIORITY, RELIABLE, 0, remote, false); | ||||
|  | ||||
| 	while (true) { | ||||
| 		packet = peer->Receive(); | ||||
| 		if (!packet) continue; | ||||
|  | ||||
| 		uint8_t packet_id = packet->data[0]; | ||||
| 		switch (packet_id) { | ||||
| 		default: | ||||
| 			std::cout << "Packet: " << static_cast<uint32_t>(packet_id) << std::endl; | ||||
| 		} | ||||
| 		peer->DeallocatePacket(packet); | ||||
| 	} | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
| @@ -355,6 +355,18 @@ void ChatPacketHandler::HandleGMLevelUpdate(Packet* packet) { | ||||
| 	inStream.Read(player.gmLevel); | ||||
| } | ||||
|  | ||||
| void ChatPacketHandler::HandleGMAnnounce(Packet* packet) { | ||||
| 	CINSTREAM_SKIP_HEADER; | ||||
| 	uint32_t titleLen, messageLen; | ||||
| 	inStream.Read(titleLen); | ||||
| 	std::string title(titleLen, 0); | ||||
| 	inStream.Read(title.data(), titleLen); | ||||
| 	inStream.Read(messageLen); | ||||
| 	std::string message(messageLen, 0); | ||||
| 	inStream.Read(message.data(), messageLen); | ||||
| 	LOG("GM Announcement from %s: '%s' '%s'", packet->systemAddress.ToString(), title.c_str(), message.c_str()); | ||||
| } | ||||
|  | ||||
|  | ||||
| void ChatPacketHandler::HandleWho(Packet* packet) { | ||||
| 	CINSTREAM_SKIP_HEADER; | ||||
|   | ||||
| @@ -50,6 +50,7 @@ namespace ChatPacketHandler { | ||||
| 	void HandleFriendResponse(Packet* packet); | ||||
| 	void HandleRemoveFriend(Packet* packet); | ||||
| 	void HandleGMLevelUpdate(Packet* packet); | ||||
| 	void HandleGMAnnounce(Packet* packet); | ||||
| 	void HandleWho(Packet* packet); | ||||
| 	void HandleShowAll(Packet* packet); | ||||
|  | ||||
|   | ||||
| @@ -122,10 +122,13 @@ int main(int argc, char** argv) { | ||||
| 	uint32_t framesSinceMasterDisconnect = 0; | ||||
| 	uint32_t framesSinceLastSQLPing = 0; | ||||
|  | ||||
| 	// Independant chat server | ||||
| 	bool isStandalone = argc > 1 && strcmp(argv[1], "--standalone") == 0; | ||||
|  | ||||
| 	Game::logger->Flush(); // once immediately before main loop | ||||
| 	while (!Game::ShouldShutdown()) { | ||||
| 		//Check if we're still connected to master: | ||||
| 		if (!Game::server->GetIsConnectedToMaster()) { | ||||
| 		if (!isStandalone && !Game::server->GetIsConnectedToMaster()) { | ||||
| 			framesSinceMasterDisconnect++; | ||||
|  | ||||
| 			if (framesSinceMasterDisconnect >= chatFramerate) | ||||
| @@ -281,6 +284,7 @@ void HandlePacket(Packet* packet) { | ||||
| 			break; | ||||
| 		case eChatMessageType::GM_ANNOUNCE:{ | ||||
| 			// we just forward this packet to every connected server | ||||
| 			ChatPacketHandler::HandleGMAnnounce(packet); | ||||
| 			inStream.ResetReadPointer(); | ||||
| 			Game::server->Send(inStream, packet->systemAddress, true); // send to everyone except origin | ||||
| 			} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Xiphoseer
					Xiphoseer