- some cleanup for the new IRC client in the Masterserver menu, and changed default channel for in game IRC chat to megaglest-lobby
This commit is contained in:
parent
1d4de5e423
commit
8b0b6300ed
|
@ -33,8 +33,7 @@ namespace Glest{ namespace Game{
|
|||
DisplayMessageFunction MenuStateMasterserver::pCB_DisplayMessage = NULL;
|
||||
|
||||
static const char *IRC_SERVER = "irc.freenode.net";
|
||||
static const char *IRC_CHANNEL = "#megaglest";
|
||||
|
||||
static const char *IRC_CHANNEL = "#megaglest-lobby";
|
||||
|
||||
// =====================================================
|
||||
// class ServerLine
|
||||
|
@ -349,10 +348,11 @@ MenuStateMasterserver::MenuStateMasterserver(Program *program, MainMenu *mainMen
|
|||
|
||||
// write hint to console:
|
||||
Config &configKeys = Config::getInstance(std::pair<ConfigType,ConfigType>(cfgMainKeys,cfgUserKeys));
|
||||
console.addLine(lang.get("To switch off music press")+" - \""+configKeys.getCharKey("ToggleMusic")+"\"");
|
||||
//console.addLine(lang.get("To switch off music press")+" - \""+configKeys.getCharKey("ToggleMusic")+"\"");
|
||||
|
||||
GraphicComponent::applyAllCustomProperties(containerName);
|
||||
|
||||
consoleIRC.addLine(lang.get("To switch off music press")+" - \""+configKeys.getCharKey("ToggleMusic")+"\"");
|
||||
chatManager.init(&consoleIRC, -1,true);
|
||||
|
||||
MutexSafeWrapper safeMutexPtr(&masterServerThreadPtrChangeAccessor);
|
||||
|
@ -387,7 +387,7 @@ void MenuStateMasterserver::IRC_CallbackEvent(const char* origin, const char **p
|
|||
void MenuStateMasterserver::cleanup() {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
printf("In [%s::%s Line: %d] [%p]\n",__FILE__,__FUNCTION__,__LINE__,ircClient);
|
||||
//printf("In [%s::%s Line: %d] [%p]\n",__FILE__,__FUNCTION__,__LINE__,ircClient);
|
||||
|
||||
if(masterServerThreadInDeletion == false) {
|
||||
MutexSafeWrapper safeMutexPtr(&masterServerThreadPtrChangeAccessor);
|
||||
|
@ -417,7 +417,7 @@ void MenuStateMasterserver::cleanup() {
|
|||
|
||||
clearServerLines();
|
||||
|
||||
printf("Exiting master server menu [%p]\n",ircClient);
|
||||
//printf("Exiting master server menu [%p]\n",ircClient);
|
||||
if(ircClient != NULL) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
|
@ -436,7 +436,7 @@ void MenuStateMasterserver::cleanup() {
|
|||
MenuStateMasterserver::~MenuStateMasterserver() {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
printf("In [%s::%s Line: %d] [%p]\n",__FILE__,__FUNCTION__,__LINE__,ircClient);
|
||||
//printf("In [%s::%s Line: %d] [%p]\n",__FILE__,__FUNCTION__,__LINE__,ircClient);
|
||||
cleanup();
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] END\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
@ -630,7 +630,7 @@ void MenuStateMasterserver::render(){
|
|||
renderer.renderLabel(&ircOnlinePeopleListLabel,&titleLabelColor);
|
||||
|
||||
// render console
|
||||
renderer.renderConsole(&console,false,false);
|
||||
//renderer.renderConsole(&console,false,false);
|
||||
|
||||
for(int i=0; i<serverLines.size(); ++i){
|
||||
serverLines[i]->render();
|
||||
|
@ -660,7 +660,7 @@ void MenuStateMasterserver::update() {
|
|||
playServerFoundSound=false;
|
||||
}
|
||||
|
||||
console.update();
|
||||
//console.update();
|
||||
|
||||
//call the chat manager
|
||||
chatManager.updateNetwork();
|
||||
|
@ -926,19 +926,19 @@ void MenuStateMasterserver::keyDown(char key) {
|
|||
float currentVolume = CoreData::getInstance().getMenuMusic()->getVolume();
|
||||
if(currentVolume > 0) {
|
||||
CoreData::getInstance().getMenuMusic()->setVolume(0.f);
|
||||
console.addLine(lang.get("GameMusic") + " " + lang.get("Off"));
|
||||
consoleIRC.addLine(lang.get("GameMusic") + " " + lang.get("Off"));
|
||||
}
|
||||
else {
|
||||
CoreData::getInstance().getMenuMusic()->setVolume(configVolume);
|
||||
//If the config says zero, use the default music volume
|
||||
//gameMusic->setVolume(configVolume ? configVolume : 0.9);
|
||||
console.addLine(lang.get("GameMusic"));
|
||||
consoleIRC.addLine(lang.get("GameMusic"));
|
||||
}
|
||||
}
|
||||
else if(key == configKeys.getCharKey("SaveGUILayout")) {
|
||||
bool saved = GraphicComponent::saveAllCustomProperties(containerName);
|
||||
Lang &lang= Lang::getInstance();
|
||||
console.addLine(lang.get("GUILayoutSaved") + " [" + (saved ? lang.get("Yes") : lang.get("No"))+ "]");
|
||||
consoleIRC.addLine(lang.get("GUILayoutSaved") + " [" + (saved ? lang.get("Yes") : lang.get("No"))+ "]");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -122,7 +122,7 @@ private:
|
|||
SimpleTaskThread *updateFromMasterserverThread;
|
||||
bool playServerFoundSound;
|
||||
|
||||
Console console;
|
||||
//Console console;
|
||||
|
||||
static DisplayMessageFunction pCB_DisplayMessage;
|
||||
std::string threadedErrorMsg;
|
||||
|
|
|
@ -18,6 +18,11 @@
|
|||
|
||||
#include "leak_dumper.h"
|
||||
|
||||
// Special way to forward declare a typedef struct
|
||||
struct irc_session_s;
|
||||
typedef struct irc_session_s irc_session_t;
|
||||
//
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace Shared { namespace PlatformCommon {
|
||||
|
@ -35,6 +40,7 @@ class IRCThread : public BaseThread
|
|||
{
|
||||
protected:
|
||||
std::vector<string> argv;
|
||||
irc_session_t *ircSession;
|
||||
|
||||
public:
|
||||
IRCThread(const std::vector<string> &argv,IRCCallbackInterface *callbackObj);
|
||||
|
@ -44,11 +50,9 @@ public:
|
|||
|
||||
void SendIRCCmdMessage(string target, string msg);
|
||||
std::vector<string> GetIRCConnectedNickList(string target);
|
||||
|
||||
static IRCCallbackInterface *callbackObj;
|
||||
|
||||
std::vector<string> getNickList() { return eventData; }
|
||||
|
||||
static IRCCallbackInterface *callbackObj;
|
||||
static std::vector<string> eventData;
|
||||
static bool eventDataDone;
|
||||
static bool isConnected;
|
||||
|
|
|
@ -25,8 +25,6 @@
|
|||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
irc_session_t *ircSession;
|
||||
|
||||
using namespace Shared::Util;
|
||||
using namespace Shared::PlatformCommon;
|
||||
|
||||
|
@ -36,7 +34,6 @@ IRCCallbackInterface *IRCThread::callbackObj=NULL;
|
|||
std::vector<string> IRCThread::eventData;
|
||||
bool IRCThread::eventDataDone = false;
|
||||
bool IRCThread::isConnected = false;
|
||||
|
||||
//
|
||||
// We store data in IRC session context.
|
||||
//
|
||||
|
@ -57,12 +54,15 @@ void addlog (const char * fmt, ...) {
|
|||
vsnprintf (buf, sizeof(buf), fmt, va_alist);
|
||||
#endif
|
||||
va_end (va_alist);
|
||||
printf ("===> IRC: %s\n", buf);
|
||||
|
||||
if ( (fp = fopen ("irctest.log", "ab")) != 0 ) {
|
||||
fprintf (fp, "%s\n", buf);
|
||||
fclose (fp);
|
||||
}
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("===> IRC: %s\n", buf);
|
||||
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED == true) {
|
||||
if ( (fp = fopen ("irctest.log", "ab")) != 0 ) {
|
||||
fprintf (fp, "%s\n", buf);
|
||||
fclose (fp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dump_event (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) {
|
||||
|
@ -71,9 +71,9 @@ void dump_event (irc_session_t * session, const char * event, const char * origi
|
|||
buf[0] = '\0';
|
||||
|
||||
for ( cnt = 0; cnt < count; cnt++ ) {
|
||||
if ( cnt )
|
||||
if ( cnt ) {
|
||||
strcat (buf, "|");
|
||||
|
||||
}
|
||||
strcat (buf, params[cnt]);
|
||||
}
|
||||
|
||||
|
@ -86,12 +86,11 @@ void event_join(irc_session_t * session, const char * event, const char * origin
|
|||
if(IRCThread::isConnected == false) {
|
||||
irc_cmd_user_mode (session, "+i");
|
||||
irc_cmd_msg (session, params[0], "MG Bot says hello!");
|
||||
//GetIRCConnectedNickList(argv[2]);
|
||||
}
|
||||
else {
|
||||
char realNick[128]="";
|
||||
irc_target_get_nick(origin,&realNick[0],127);
|
||||
printf ("===> IRC: user joined channel realNick [%s] origin [%s]\n", realNick,origin);
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("===> IRC: user joined channel realNick [%s] origin [%s]\n", realNick,origin);
|
||||
IRCThread::eventData.push_back(realNick);
|
||||
}
|
||||
|
||||
|
@ -108,9 +107,7 @@ void event_connect (irc_session_t * session, const char * event, const char * or
|
|||
void event_privmsg (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) {
|
||||
dump_event (session, event, origin, params, count);
|
||||
|
||||
printf ("'%s' said me (%s): %s\n",
|
||||
origin ? origin : "someone",
|
||||
params[0], params[1] );
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("'%s' said me (%s): %s\n",origin ? origin : "someone",params[0], params[1] );
|
||||
}
|
||||
|
||||
void dcc_recv_callback (irc_session_t * session, irc_dcc_t id, int status, void * ctx, const char * data, unsigned int length) {
|
||||
|
@ -120,46 +117,47 @@ void dcc_recv_callback (irc_session_t * session, irc_dcc_t id, int status, void
|
|||
switch (status)
|
||||
{
|
||||
case LIBIRC_ERR_CLOSED:
|
||||
printf ("DCC %d: chat closed\n", id);
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("DCC %d: chat closed\n", id);
|
||||
break;
|
||||
|
||||
case 0:
|
||||
if ( !data )
|
||||
{
|
||||
printf ("DCC %d: chat connected\n", id);
|
||||
if ( !data ) {
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("DCC %d: chat connected\n", id);
|
||||
irc_dcc_msg (session, id, "Hehe");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf ("DCC %d: %s\n", id, data);
|
||||
else {
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("DCC %d: %s\n", id, data);
|
||||
sprintf (buf, "DCC [%d]: %d", id, count++);
|
||||
irc_dcc_msg (session, id, buf);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
printf ("DCC %d: error %s\n", id, irc_strerror(status));
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("DCC %d: error %s\n", id, irc_strerror(status));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void dcc_file_recv_callback (irc_session_t * session, irc_dcc_t id, int status, void * ctx, const char * data, unsigned int length) {
|
||||
if ( status == 0 && length == 0 ) {
|
||||
printf ("File sent successfully\n");
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("File sent successfully\n");
|
||||
|
||||
if ( ctx )
|
||||
if ( ctx ) {
|
||||
fclose ((FILE*) ctx);
|
||||
}
|
||||
}
|
||||
else if ( status ) {
|
||||
printf ("File sent error: %d\n", status);
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("File sent error: %d\n", status);
|
||||
|
||||
if ( ctx )
|
||||
if ( ctx ) {
|
||||
fclose ((FILE*) ctx);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ( ctx )
|
||||
if ( ctx ) {
|
||||
fwrite (data, 1, length, (FILE*) ctx);
|
||||
printf ("File sent progress: %d\n", length);
|
||||
}
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("File sent progress: %d\n", length);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -169,26 +167,26 @@ void event_channel(irc_session_t * session, const char * event, const char * ori
|
|||
if ( count != 2 )
|
||||
return;
|
||||
|
||||
printf ("===> IRC: '%s' said in channel %s: %s\n",origin ? origin : "someone",params[0], params[1] );
|
||||
if(IRCThread::callbackObj) {
|
||||
IRCThread::callbackObj->IRC_CallbackEvent(origin, params, count);
|
||||
}
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("===> IRC: '%s' said in channel %s: %s\n",origin ? origin : "someone",params[0], params[1] );
|
||||
|
||||
if ( !origin )
|
||||
if ( !origin ) {
|
||||
return;
|
||||
}
|
||||
|
||||
irc_target_get_nick (origin, nickbuf, sizeof(nickbuf));
|
||||
irc_target_get_nick(origin, nickbuf, sizeof(nickbuf));
|
||||
|
||||
if(IRCThread::callbackObj) {
|
||||
IRCThread::callbackObj->IRC_CallbackEvent(nickbuf, params, count);
|
||||
}
|
||||
|
||||
if ( !strcmp (params[1], "quit") )
|
||||
irc_cmd_quit (session, "of course, Master!");
|
||||
|
||||
if ( !strcmp (params[1], "help") )
|
||||
{
|
||||
if ( !strcmp (params[1], "help") ) {
|
||||
irc_cmd_msg (session, params[0], "quit, help, dcc chat, dcc send, ctcp");
|
||||
}
|
||||
|
||||
if ( !strcmp (params[1], "ctcp") )
|
||||
{
|
||||
if ( !strcmp (params[1], "ctcp") ) {
|
||||
irc_cmd_ctcp_request (session, nickbuf, "PING 223");
|
||||
irc_cmd_ctcp_request (session, nickbuf, "FINGER");
|
||||
irc_cmd_ctcp_request (session, nickbuf, "VERSION");
|
||||
|
@ -198,13 +196,13 @@ void event_channel(irc_session_t * session, const char * event, const char * ori
|
|||
if ( !strcmp (params[1], "dcc chat") ) {
|
||||
irc_dcc_t dccid;
|
||||
irc_dcc_chat (session, 0, nickbuf, dcc_recv_callback, &dccid);
|
||||
printf ("DCC chat ID: %d\n", dccid);
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("DCC chat ID: %d\n", dccid);
|
||||
}
|
||||
|
||||
if ( !strcmp (params[1], "dcc send") ) {
|
||||
irc_dcc_t dccid;
|
||||
irc_dcc_sendfile (session, 0, nickbuf, "irctest.c", dcc_file_recv_callback, &dccid);
|
||||
printf ("DCC send ID: %d\n", dccid);
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("DCC send ID: %d\n", dccid);
|
||||
}
|
||||
|
||||
if ( !strcmp (params[1], "topic") ) {
|
||||
|
@ -225,18 +223,18 @@ void event_channel(irc_session_t * session, const char * event, const char * ori
|
|||
}
|
||||
|
||||
void irc_event_dcc_chat(irc_session_t * session, const char * nick, const char * addr, irc_dcc_t dccid) {
|
||||
printf ("DCC chat [%d] requested from '%s' (%s)\n", dccid, nick, addr);
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("DCC chat [%d] requested from '%s' (%s)\n", dccid, nick, addr);
|
||||
|
||||
irc_dcc_accept (session, dccid, 0, dcc_recv_callback);
|
||||
}
|
||||
|
||||
void irc_event_dcc_send(irc_session_t * session, const char * nick, const char * addr, const char * filename, unsigned long size, irc_dcc_t dccid) {
|
||||
FILE * fp;
|
||||
printf ("DCC send [%d] requested from '%s' (%s): %s (%lu bytes)\n", dccid, nick, addr, filename, size);
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("DCC send [%d] requested from '%s' (%s): %s (%lu bytes)\n", dccid, nick, addr, filename, size);
|
||||
|
||||
if ( (fp = fopen ("file", "wb")) == 0 )
|
||||
if ( (fp = fopen ("file", "wb")) == 0 ) {
|
||||
abort();
|
||||
|
||||
}
|
||||
irc_dcc_accept (session, dccid, fp, dcc_file_recv_callback);
|
||||
}
|
||||
|
||||
|
@ -247,15 +245,15 @@ void event_leave(irc_session_t *session, const char *event, const char *origin,
|
|||
// someone left the channel.
|
||||
|
||||
if(origin) {
|
||||
printf ("===> IRC: user left channel [%s]\n", origin);
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("===> IRC: user left channel [%s]\n", origin);
|
||||
|
||||
char realNick[128]="";
|
||||
irc_target_get_nick(origin,&realNick[0],127);
|
||||
|
||||
printf ("===> IRC: user left channel realNick [%s]\n", realNick);
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("===> IRC: user left channel realNick [%s]\n", realNick);
|
||||
|
||||
for(unsigned int i = 0; i < IRCThread::eventData.size(); ++i) {
|
||||
printf ("===> IRC: lookingfor match [%s] realNick [%s]\n", IRCThread::eventData[i].c_str(),realNick);
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("===> IRC: lookingfor match [%s] realNick [%s]\n", IRCThread::eventData[i].c_str(),realNick);
|
||||
|
||||
if(IRCThread::eventData[i] == realNick) {
|
||||
IRCThread::eventData.erase(IRCThread::eventData.begin() + i);
|
||||
|
@ -313,11 +311,11 @@ IRCThread::IRCThread(const std::vector<string> &argv, IRCCallbackInterface *call
|
|||
}
|
||||
|
||||
void IRCThread::signalQuit() {
|
||||
printf ("===> IRC: signalQuit [%p]\n",ircSession);
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("===> IRC: signalQuit [%p]\n",ircSession);
|
||||
|
||||
if(ircSession != NULL) {
|
||||
callbackObj=NULL;
|
||||
printf ("===> IRC: Quitting Channel\n");
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("===> IRC: Quitting Channel\n");
|
||||
irc_cmd_quit(ircSession, "MG Bot is closing!");
|
||||
BaseThread::signalQuit();
|
||||
isConnected = false;
|
||||
|
@ -325,7 +323,7 @@ void IRCThread::signalQuit() {
|
|||
}
|
||||
|
||||
bool IRCThread::shutdownAndWait() {
|
||||
printf ("===> IRC: shutdownAndWait [%p]\n",ircSession);
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("===> IRC: shutdownAndWait [%p]\n",ircSession);
|
||||
|
||||
signalQuit();
|
||||
return BaseThread::shutdownAndWait();
|
||||
|
@ -375,7 +373,7 @@ void IRCThread::execute() {
|
|||
ircSession=NULL;
|
||||
|
||||
if(argv.size() != 3) {
|
||||
printf ("===> IRC Usage: <server> <nick> <channel> : got params [%ld]\n",argv.size());
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("===> IRC Usage: <server> <nick> <channel> : got params [%ld]\n",argv.size());
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -408,7 +406,7 @@ void IRCThread::execute() {
|
|||
ircSession = irc_create_session (&callbacks);
|
||||
|
||||
if(!ircSession) {
|
||||
printf ("===> IRC Could not create session\n");
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("===> IRC Could not create session\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -422,7 +420,7 @@ void IRCThread::execute() {
|
|||
irc_set_ctx(ircSession, &ctx);
|
||||
|
||||
if(irc_connect(ircSession, argv[0].c_str(), 6667, 0, argv[1].c_str(), 0, 0)) {
|
||||
printf ("===> IRC Could not connect: %s\n", irc_strerror (irc_errno(ircSession)));
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("===> IRC Could not connect: %s\n", irc_strerror (irc_errno(ircSession)));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -440,11 +438,11 @@ void IRCThread::execute() {
|
|||
this->getQuitStatus() == false && iAttempts <= 5;
|
||||
++iAttempts) {
|
||||
if(irc_run(ircSession)) {
|
||||
printf ("===> IRC Could not run the session: %s\n", irc_strerror (irc_errno(ircSession)));
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("===> IRC Could not run the session: %s\n", irc_strerror (irc_errno(ircSession)));
|
||||
}
|
||||
}
|
||||
|
||||
printf ("===> IRC exiting IRC CLient!\n");
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf ("===> IRC exiting IRC CLient!\n");
|
||||
}
|
||||
catch(const exception &ex) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugError,"In [%s::%s Line: %d] Error [%s]\n",__FILE__,__FUNCTION__,__LINE__,ex.what());
|
||||
|
@ -458,8 +456,9 @@ void IRCThread::execute() {
|
|||
SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] IRC thread is exiting\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
}
|
||||
|
||||
// Delete ourself when the thread is done (no other actions can happen after this
|
||||
// such as the mutex which modifies the running status of this method
|
||||
delete this;
|
||||
}
|
||||
|
||||
|
||||
}}//end namespace
|
||||
|
|
Loading…
Reference in New Issue