?? main.cpp
字號(hào):
// ======================================================
// ePlug Plug Manager
//
// ======================================================
#include "fx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include "Eplug.h"
#include "mail.h"
// ======================================================
class ButtonWindow : public FXMainWindow {
FXDECLARE(ButtonWindow)
protected:
FXApp *m_app;
TRANSPORT_HANDLE m_plug;
FXTimer *m_timer_handle;
FXVerticalFrame *m_v_frame;
FXHorizontalFrame *m_h_frame;
FXSplitter *m_sep;
FXText *m_text_area;
FXButton *m_button1;
FXButton *m_button2;
FXButton *m_button3;
FXButton *m_button4;
FXButton *m_button5;
FXList *m_list;
protected:
ButtonWindow() {}
public:
enum {
ID_TIMERTICK = FXMainWindow::ID_LAST,
ID_BUTTON_1,
ID_BUTTON_2,
ID_BUTTON_3,
ID_BUTTON_4,
ID_BUTTON_5,
};
public:
ButtonWindow(FXApp* a);
~ButtonWindow();
void create();
long onTimerTick(FXObject*,FXSelector,void*);
long onButton1Press(FXObject *, FXSelector, void*);
long onButton2Press(FXObject *, FXSelector, void*);
long onButton3Press(FXObject *, FXSelector, void*);
long onButton4Press(FXObject *, FXSelector, void*);
long onButton5Press(FXObject *, FXSelector, void*);
};
// ======================================================
FXDEFMAP(ButtonWindow) ButtonWindowMap[] = {
FXMAPFUNC(SEL_TIMEOUT, ButtonWindow::ID_TIMERTICK, ButtonWindow::onTimerTick),
FXMAPFUNC(SEL_COMMAND, ButtonWindow::ID_BUTTON_1, ButtonWindow::onButton1Press),
FXMAPFUNC(SEL_COMMAND, ButtonWindow::ID_BUTTON_2, ButtonWindow::onButton2Press),
FXMAPFUNC(SEL_COMMAND, ButtonWindow::ID_BUTTON_3, ButtonWindow::onButton3Press),
FXMAPFUNC(SEL_COMMAND, ButtonWindow::ID_BUTTON_4, ButtonWindow::onButton4Press),
FXMAPFUNC(SEL_COMMAND, ButtonWindow::ID_BUTTON_5, ButtonWindow::onButton5Press),
};
// ======================================================
FXIMPLEMENT(ButtonWindow, FXMainWindow, ButtonWindowMap, ARRAYNUMBER(ButtonWindowMap))
// ======================================================
ButtonWindow::ButtonWindow(FXApp *app) :
FXMainWindow(app, "eTransport Internet Relay Chat", NULL, NULL, DECOR_ALL, 0, 0, 640, 480) {
// init eTransport
EpInit(0);
// init member variables
m_app = app;
m_plug = NULL;
// a frame
m_v_frame = new FXVerticalFrame(this, LAYOUT_FILL_X | LAYOUT_FILL_Y);
//m_h_frame = new FXHorizontalFrame(m_v_frame, LAYOUT_FILL_X | LAYOUT_FILL_Y);
// a text area holds the text for irc
m_sep = new FXSplitter(m_v_frame, LAYOUT_FILL_X | LAYOUT_FILL_Y);
m_text_area = new FXText(m_sep, NULL, 0, TEXT_SHOWACTIVE | LAYOUT_FILL_X | LAYOUT_FILL_Y);
m_list = new FXList(m_sep, 0, NULL, 0, LIST_NORMAL | LAYOUT_FIX_WIDTH | LAYOUT_FILL_Y);
m_list->setWidth(100);
// buttons
m_button1 = new FXButton(m_v_frame, "Pass", NULL, this, ID_BUTTON_1);
m_button2 = new FXButton(m_v_frame, "Nick", NULL, this, ID_BUTTON_2);
m_button3 = new FXButton(m_v_frame, "User", NULL, this, ID_BUTTON_3);
m_button4 = new FXButton(m_v_frame, "Join", NULL, this, ID_BUTTON_4);
m_button5 = new FXButton(m_v_frame, "Talk Bitch", NULL, this, ID_BUTTON_5);
// init timer for peeking inside the eTransport message queue
m_timer_handle = m_app->addTimeout(20, this, ID_TIMERTICK);
}
ButtonWindow::~ButtonWindow() {
m_app->removeTimeout(m_timer_handle);
EpDisconnect(m_plug);
EpDestroyTransport(m_plug);
}
void
ButtonWindow::create() {
FXMainWindow::create();
m_v_frame->create();
m_text_area->create();
m_list->create();
m_plug = EpCreateTransport(TRANSPORT_TCPIP, NULL);
EpAttachProtocol(m_plug, CLSID_IRC_PROTOCOL);
EpConnect(m_plug, "diemen.nl.eu.undernet.org", 6667, 0);
show(PLACEMENT_SCREEN);
}
long
ButtonWindow::onTimerTick(FXObject *, FXSelector, void*) {
EpEventEx *ex = EpReceiveEvent(m_plug);
while (ex) {
if (IsEqualGUID(ex->event->protocol, CLSID_PROTOCOL_SYSTEM)) {
switch(ex->event->msg) {
case SYSTEM_CONNECTED :
FXString s = FXString("connected to host...\n");
m_text_area->appendText(s.text(), s.length());
break;
};
}
if (IsEqualGUID(ex->event->protocol, CLSID_IRC_PROTOCOL)) {
switch(ex->event->msg) {
case IRC_PING :
{
m_text_area->appendText("Ping? Pong!\n", 12);
EpEvent event;
event.protocol = CLSID_IRC_PROTOCOL;
event.msg = IRC_PONG;
event.data = (unsigned char *)ex->event->data;
event.size = ex->event->size;
event.timeout = 0;
event.reference_id = 0;
EpSendEvent(m_plug, &event);
break;
}
case IRC_NOTICEAUTH :
{
FXString s = FXString((const char *)ex->event->data) + FXString("\n");
m_text_area->appendText(s.text(), s.length());
break;
}
case IRC_MESSAGE :
{
IRCReply *m = (IRCReply *)ex->event->data;
FXString s = FXString(m->trailing) + FXString(" ") + FXString(m->middle) + FXString("\n");
m_text_area->appendText(s.text(), s.length());
break;
}
case IRC_STATUS_MESSAGE :
{
IRCStatusMessage *m = (IRCStatusMessage *)ex->event->data;
FXString s = FXString(m->message) + FXString("\n");
m_text_area->appendText(s.text(), s.length());
break;
}
case IRC_CHANNEL_TOPIC :
{
IRCChannelTopic *m = (IRCChannelTopic *)ex->event->data;
setTitle(FXString("[") + FXString(m->channel) + FXString("] - ") + FXString(m->topic));
FXString tmp = FXString("* Topic is '") + FXString(m->topic) + FXString("'\n");
m_text_area->appendText(tmp.text(), tmp.length());
break;
}
case IRC_PRIVMSG :
{
IRCReplyPrivateMsg *m = (IRCReplyPrivateMsg *)ex->event->data;
FXString tmp = FXString("<") + FXString(m->nick) + FXString("> ") + FXString(m->message) + FXString("\n");
m_text_area->appendText(tmp.text(), tmp.length());
break;
}
case IRC_NICK_ENTRY :
{
IRCNick *n = (IRCNick *)ex->event->data;
m_list->appendItem(FXString(n->nick));
m_list->sortItems();
break;
}
};
}
EpDestroyEvent(ex);
ex = EpReceiveEvent(m_plug);
}
m_timer_handle= m_app->addTimeout(20,this,ID_TIMERTICK);
return 0;
}
long
ButtonWindow::onButton1Press(FXObject *, FXSelector, void*) {
EpEvent event;
event.protocol = CLSID_IRC_PROTOCOL;
event.msg = IRC_PASS;
event.data = (unsigned char *)"40968192";
event.size = 9;
event.timeout = 0;
event.reference_id = 0;
EpSendEvent(m_plug, &event);
return true;
}
long
ButtonWindow::onButton2Press(FXObject *, FXSelector, void*) {
EpEvent event;
event.protocol = CLSID_IRC_PROTOCOL;
event.msg = IRC_NICK;
event.data = (unsigned char *)"NoEscom-";
event.size = 9;
event.timeout = 0;
event.reference_id = 0;
EpSendEvent(m_plug, &event);
return true;
}
long
ButtonWindow::onButton3Press(FXObject *, FXSelector, void*) {
IRCUser user;
user.username = "guest";
user.hostname = "tolmoon";
user.servername = "tolsun";
user.realname = "Floris van den Berg";
EpEvent event;
event.protocol = CLSID_IRC_PROTOCOL;
event.msg = IRC_USER;
event.data = (unsigned char *)&user;
event.size = sizeof(IRCUser);
event.timeout = 0;
event.reference_id = 0;
EpSendEvent(m_plug, &event);
return true;
}
long
ButtonWindow::onButton4Press(FXObject *, FXSelector, void*) {
EpEvent event;
event.protocol = CLSID_IRC_PROTOCOL;
event.msg = IRC_JOIN;
event.data = (unsigned char *)"#mp3passion";
//event.data = (unsigned char *)"#c++";
event.size = 12;
event.timeout = 0;
event.reference_id = 0;
EpSendEvent(m_plug, &event);
return true;
}
long
ButtonWindow::onButton5Press(FXObject *, FXSelector, void*) {
IRCPrivateMsg msg;
msg.target = "#c++";
msg.message = "Khan is a flaming goat raper";
EpEvent event;
event.protocol = CLSID_IRC_PROTOCOL;
event.msg = IRC_PRIVMSG;
event.data = (unsigned char *)&msg;
event.size = sizeof(IRCPrivateMsg);
event.timeout = 0;
event.reference_id = 0;
EpSendEvent(m_plug, &event);
return true;
}
/*******************************************************************************/
std::string
Scramble(std::string strWordA) {
std::string strWordB;
int intLen = strWordA.length();
if (intLen > 0) {
do {
int sngPosn = rand() % intLen;
strWordB += strWordA[sngPosn];
strWordA = strWordA.substr(0, sngPosn) + strWordA.substr(sngPosn + 1, strWordA.length() - sngPosn);
intLen = strWordA.length();
} while (intLen > 0);
}
return strWordB;
}
// Start the whole thing
int main(int argc,char *argv[]){
// Make application
FXApp application("Button", "eTransport Internet Relay Chat");
// Open display
application.init(argc,argv);
// Main window
new ButtonWindow(&application);
// Create app
application.create();
// Run
int result = application.run();
EpFinalize();
return result;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -