2012-05-29 13:31:11 +00:00
|
|
|
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
|
|
|
// Copyright (C) 2010 Winch Gate Property Limited
|
|
|
|
//
|
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
|
|
// it under the terms of the GNU Affero General Public License as
|
|
|
|
// published by the Free Software Foundation, either version 3 of the
|
|
|
|
// License, or (at your option) any later version.
|
|
|
|
//
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
// GNU Affero General Public License for more details.
|
|
|
|
//
|
|
|
|
// You should have received a copy of the GNU Affero General Public License
|
|
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Login system example, client.
|
|
|
|
*
|
|
|
|
* This client connects to a front-end server using login system.
|
|
|
|
*
|
|
|
|
* Before running this client, the front end service sample must run,
|
|
|
|
* and also the NeL naming_service, time_service, login_service, welcome_service.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
//
|
|
|
|
// Includes
|
|
|
|
//
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
#include "nel/misc/types_nl.h"
|
|
|
|
#include "nel/misc/debug.h"
|
|
|
|
#include "nel/misc/config_file.h"
|
|
|
|
#include "nel/misc/bit_mem_stream.h"
|
|
|
|
#include "nel/misc/path.h"
|
|
|
|
|
|
|
|
#include "nel/net/callback_client.h"
|
|
|
|
|
|
|
|
#ifdef NL_OS_WINDOWS
|
|
|
|
#include <conio.h>
|
|
|
|
#else
|
|
|
|
#include "kbhit.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
using namespace NLMISC;
|
|
|
|
using namespace NLNET;
|
|
|
|
|
|
|
|
// Really simple chat
|
|
|
|
// Do not display what you are typing
|
|
|
|
|
|
|
|
#ifdef NL_OS_WINDOWS
|
|
|
|
#define KEY_ESC 27
|
|
|
|
#define KEY_ENTER 13
|
|
|
|
#else
|
|
|
|
#define KEY_ESC 27
|
|
|
|
#define KEY_ENTER 10
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef CHAT_DIR
|
|
|
|
# define CHAT_DIR "."
|
|
|
|
#endif
|
|
|
|
|
|
|
|
string CurrentEditString;
|
|
|
|
|
|
|
|
// ***************************************************************************
|
|
|
|
void serverSentChat (CMessage &msgin, TSockId from, CCallbackNetBase &netbase)
|
|
|
|
{
|
|
|
|
// Called when the server sent a CHAT message
|
|
|
|
string text;
|
|
|
|
msgin.serial(text);
|
|
|
|
printf("%s\n", text.c_str());
|
|
|
|
}
|
|
|
|
|
|
|
|
// ***************************************************************************
|
|
|
|
// All messages handled by this server
|
|
|
|
#define NB_CB 1
|
|
|
|
TCallbackItem CallbackArray[NB_CB] =
|
|
|
|
{
|
|
|
|
{ "CHAT", serverSentChat }
|
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
* main
|
|
|
|
*/
|
|
|
|
int main (int argc, char **argv)
|
|
|
|
{
|
|
|
|
NLMISC::CApplicationContext applicationContext;
|
|
|
|
|
|
|
|
CCallbackClient *Client;
|
|
|
|
|
|
|
|
NLMISC::CPath::addSearchPath(CHAT_DIR);
|
|
|
|
|
|
|
|
// Read the host where to connect in the client.cfg file
|
|
|
|
CConfigFile ConfigFile;
|
|
|
|
ConfigFile.load (NLMISC::CPath::lookup("client.cfg"));
|
|
|
|
string LSHost(ConfigFile.getVar("LSHost").asString());
|
|
|
|
|
|
|
|
// Init and Connect the client to the server located on port 3333
|
|
|
|
Client = new CCallbackClient();
|
|
|
|
Client->addCallbackArray (CallbackArray, NB_CB);
|
|
|
|
|
|
|
|
printf("Please wait connecting...\n");
|
|
|
|
try
|
|
|
|
{
|
|
|
|
CInetAddress addr(LSHost+":3333");
|
|
|
|
Client->connect(addr);
|
|
|
|
}
|
|
|
|
catch(const ESocket &e)
|
|
|
|
{
|
|
|
|
printf("%s\n", e.what());
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!Client->connected())
|
|
|
|
{
|
|
|
|
printf("Connection Error\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
printf("Connected.\n");
|
|
|
|
|
|
|
|
#ifdef NL_OS_UNIX
|
|
|
|
init_keyboard();
|
|
|
|
#endif
|
|
|
|
// The main loop
|
|
|
|
do
|
|
|
|
{
|
|
|
|
int c;
|
|
|
|
if (kbhit())
|
|
|
|
{
|
|
|
|
c = getch();
|
|
|
|
if (c == KEY_ESC)
|
|
|
|
{
|
|
|
|
break; // FINSIH
|
|
|
|
}
|
|
|
|
else if (c == KEY_ENTER)
|
|
|
|
{
|
|
|
|
CMessage msg;
|
|
|
|
msg.setType("CHAT");
|
|
|
|
msg.serial (CurrentEditString);
|
|
|
|
Client->send(msg);
|
|
|
|
CurrentEditString = "";
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
CurrentEditString += c;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Client->update();
|
|
|
|
}
|
|
|
|
while (Client->connected());
|
|
|
|
|
|
|
|
#ifdef NL_OS_UNIX
|
|
|
|
close_keyboard();
|
|
|
|
#endif
|
|
|
|
// Finishing
|
|
|
|
delete Client;
|
|
|
|
}
|