⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clidb.cpp

📁 最新版本!fastdb是高效的内存数据库系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//-< CLIDB.CPP >-----------------------------------------------------*--------*
// FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *
// (Main Memory Database Management System)                          *   /\|  *
//                                                                   *  /  \  *
//                          Created:      7-Nov-99    K.A. Knizhnik  * / [] \ *
//                          Last update:  7-Nov-99    K.A. Knizhnik  * GARRET *
//-------------------------------------------------------------------*--------*
// Example of Web database publishing: Clients Database
//-------------------------------------------------------------------*--------*

#include "clidb.h"

dbDatabase db;

//- Client ------------------------------------------------

void Client::print(WWWconnection& con) const 
{ 
    con << TAG << "<OPTION VALUE=" << clientId << ">" << organization 
        << "</OPTION>";
}
    
REGISTER(Client);


//- Manager ------------------------------------------------

bool Manager::loginFromAnyHost;

void Manager::print(WWWconnection& con) const 
{ 
    con << TAG << "<OPTION VALUE=\"" << name << "\">" << name 
        << "</OPTION>";
}
    
REGISTER(Manager);

//- Segment ------------------------------------------------

void Segment::print(WWWconnection& con) const 
{ 
    con << TAG << "<OPTION VALUE=\"" << name << "\">" << name 
        << "</OPTION>";
}
    
REGISTER(Segment);

//- History ------------------------------------------------

void History::print(WWWconnection& con) const 
{     
    ThreadContext& the = ThreadContext::of(con);
    char buf[64];
    
    con << TAG << "<OPTION VALUE=" << messageId << ">"  
        << date.asString(buf, sizeof buf)
        << " " << (the.managerForm 
                   ? the.clients.at(client)->organization 
                   : manager != null ? the.managers.at(manager)->name : "")
        << "</OPTION>";
}
    
REGISTER(History);

//---- ClientSequencer -------------------------------------

REGISTER(Sequencer);


template<class T>
void print(WWWconnection& con, dbCursor<T>& cursor) {
    do { 
        cursor->print(con);
    } while(cursor.next());
}

template<class T>
void print(WWWconnection& con, dbArray<dbReference<T> > const& arr) {
    dbCursor<T> cursor;
    for (int i = 0, n = arr.length(); i < n; i++) { 
        cursor.at(arr[i])->print(con);
    } 
}

//---- Thread Context --------------------------------------------------

ThreadContext& ThreadContext::of(WWWconnection& con)
{
    if (con.userData == NULL) { 
        con.userData = new ThreadContext;
    }
    return *(ThreadContext*)con.userData;
}

ThreadContext::ThreadContext() 
{
    qClient = "clientId=",clientId;
    qManager = "name=",&name;
    qClients = "start from",clientsArray,"order by organization";
    qManagers = "start from",managersArray,"order by name";
    qSegment = "name=",&name;
    qMessage = "messageId=",messageId;
    qMessages = "start from",messagesArray,
                "order by",dbDateTime::descent("date");
}

//--- HTML specific part -------------------------------------------

#define HTML_HEAD "Content-type: text/html\r\n\r\n\
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\"><HTML><HEAD>"

#define BODY "<BODY BGCOLOR=\"#c0c0c0\">"

#define EMPTY_LIST "<OPTION>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</OPTION></SELECT><BR>"

void mainMenuReference(WWWconnection& con)
{
    char* manager = con.get("manager");
    if (manager != NULL) { 
        con << TAG 
            << "<P><HR><CENTER><A HREF=\"" << con.getStub() << "?socket=" 
            << con.getAddress() << "&page=managerForm&manager=" 
            << URL << manager << "\">Back to main menu</A></CENTER>";
    }
    con << TAG << "</BODY></HTML>";
}

bool error(WWWconnection& con, char const* msg)
{
    con << TAG << 
        HTML_HEAD "<TITLE>ClientDB error</TITLE></HEAD><BODY>"
        "<H1><FONT COLOR=\"#FF0000\">"
        << msg << "</FONT></H1></BODY></HTML>";
    mainMenuReference(con);
    return true;
}



bool addManagerForm(WWWconnection& con)
{
    con << TAG << 
        HTML_HEAD "<TITLE>Add new manager</TITLE></HEAD>"
        BODY
        "<H2>Add manager</H2>"
        "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
        "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << 
        "\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"addManager\">"
        "<INPUT TYPE=hidden NAME=\"manager\" VALUE=\"" << con.get("manager") <<
        "\">"
        "<INPUT TYPE=hidden NAME=\"segment\" VALUE=\"" << con.get("segment") <<
        "\"><TABLE>"
        "<TR><TH ALIGN=LEFT>Manager name</TH>"
        "<TD><INPUT TYPE=text NAME=\"name\" SIZE=30></TD></TR>"
        "<TR><TH ALIGN=LEFT>Host IP address</TH>"
        "<TD><INPUT TYPE=text NAME=\"ipaddr\" SIZE=16 VALUE=\"*\"></TD></TR>"
        "<TR><TH ALIGN=LEFT>Administrator rights</TH>"
        "<TD><INPUT TYPE=CHECKBOX NAME=\"miniadmin\" VALUE=\"on\"></TD></TR>"
        "</TABLE>"
        "<INPUT TYPE=submit VALUE=\"Add\">&nbsp;"
        "<INPUT TYPE=reset VALUE=\"Reset\"></FORM>";
    mainMenuReference(con);
    return true;
}

bool addClientForm(WWWconnection& con)
{
    con << TAG << 
        HTML_HEAD "<TITLE>Add new client</TITLE></HEAD>"
        BODY
        "<H2>Add client</H2>"
        "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
        "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << 
        "\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"addClient\">"
        "<INPUT TYPE=hidden NAME=\"manager\" VALUE=\"" << con.get("manager") <<
        "\">"
        "<INPUT TYPE=hidden NAME=\"segment\" VALUE=\"" << con.get("segment") <<
        "\"><TABLE>"
        "<TR><TH ALIGN=LEFT>Organization</TH>"
        "<TD><INPUT TYPE=text NAME=\"organization\" SIZE=40></TD></TR>"
        "<TR><TH ALIGN=LEFT>Phone</TH>"
        "<TD><INPUT TYPE=text NAME=\"phone\" SIZE=20></TD></TR>"
        "<TR><TH ALIGN=LEFT>Phone2</TH>"
        "<TD><INPUT TYPE=text NAME=\"phone2\" SIZE=20></TD></TR>"
        "<TR><TH ALIGN=LEFT>Fax</TH>"
        "<TD><INPUT TYPE=text NAME=\"fax\" SIZE=20></TD></TR>"
        "<TR><TH ALIGN=LEFT>E-Mail</TH>"
        "<TD><INPUT TYPE=text NAME=\"email\" SIZE=30></TD></TR>"
        "<TR><TH ALIGN=LEFT>WWW address</TH>"
        "<TD><INPUT TYPE=text NAME=\"www\" SIZE=30></TD></TR>"
        "<TR><TH ALIGN=LEFT>Person</TH>"
        "<TD><INPUT TYPE=text NAME=\"person\" SIZE=40></TD></TR>"
        "<TR><TH ALIGN=LEFT>Person2</TH>"
        "<TD><INPUT TYPE=text NAME=\"person2\" SIZE=40></TD></TR>"
        "<TR><TH ALIGN=LEFT>CEO</TH>"
        "<TD><INPUT TYPE=text NAME=\"lpr\" SIZE=40></TD></TR>"
        "<TR><TH ALIGN=LEFT>Address</TH>"
        "<TD><INPUT TYPE=text NAME=\"addr\" SIZE=40></TD></TR>"
        "<TR><TH ALIGN=LEFT>Information</TH>"
        "<TD><INPUT TYPE=text NAME=\"info\" SIZE=40></TD></TR>"
        "<TR><TH ALIGN=LEFT>Status</TH>"
        "<TD><INPUT TYPE=text NAME=\"status\" SIZE=40></TD></TR>"
        "</TABLE><INPUT TYPE=submit VALUE=\"Add\">&nbsp;"
        "<INPUT TYPE=reset VALUE=\"Reset\"></FORM>";
    mainMenuReference(con);
    return true;
}


bool addSegmentForm(WWWconnection& con)
{
    con << TAG << 
        HTML_HEAD "<TITLE>Add new segment</TITLE></HEAD>"
        BODY
        "<H2>Add segment</H2>"
        "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
        "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << 
        "\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"addSegment\">"
        "<INPUT TYPE=hidden NAME=\"manager\" VALUE=\"" << con.get("manager") <<
        "\"><TABLE>"
        "<TR><TH ALIGN=LEFT>Segment name </TH>"
        "<TD><INPUT TYPE=text NAME=\"name\" SIZE=30></TD></TR>"
        "</TD></TR></TABLE><P>"
        "<INPUT TYPE=submit VALUE=\"Add\">&nbsp;"
        "<INPUT TYPE=reset VALUE=\"Reset\"></FORM>";
    mainMenuReference(con);
    return true;
}

bool addHistoryForm(WWWconnection& con)
{
    con << TAG << 
        HTML_HEAD "<TITLE>Add message</TITLE></HEAD>"
        BODY
        "<H2>Add message</H2>"
        "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
        "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << 
        "\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"addHistory\">"
        "<INPUT TYPE=hidden NAME=\"manager\" VALUE=\"" << con.get("manager") <<
        "\"><INPUT TYPE=hidden NAME=\"client\" VALUE=" << con.get("client") <<
        "\"><TEXTAREA NAME=\"message\" ROWS=10 COLS=60></TEXTAREA><P>"
        "<INPUT TYPE=submit VALUE=\"Add\">&nbsp;"
        "<INPUT TYPE=reset VALUE=\"Reset\"></FORM>";
    mainMenuReference(con);
    return true;
}


bool editManagerForm(WWWconnection& con)
{
    if (con.get("new")) { 
        return addManagerForm(con);
    }
    ThreadContext& the = ThreadContext::of(con);
    the.name = con.get("name");
    if (the.name == NULL) { 
        return error(con, "No manager was selected");
    }
    if (the.managers.select(the.qManager) == 0) { 
        return error(con, "No such manager");
    }
    
    con << TAG << 
        HTML_HEAD "<TITLE>Edit manager form</TITLE></HEAD>"
        BODY
        "<H2>Update manager</H2>"
        "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
        "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << 
        "\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"editManager\">"
        "<INPUT TYPE=hidden NAME=\"manager\" VALUE=\"" << con.get("manager") <<
        "\"><INPUT TYPE=hidden NAME=\"oldName\" VALUE=\"" << the.name << "\">"
        "<TABLE><TR><TH ALIGN=LEFT>Manager name</TH>"
        "<TD><INPUT TYPE=text NAME=\"name\" SIZE=30 VALUE=\"" 
        << the.managers->name << "\"></TD></TR>"
        "<TR><TH ALIGN=LEFT>Host IP address</TH>"
        "<TD><INPUT TYPE=text NAME=\"ipaddr\" SIZE=16 VALUE=\""
        << the.managers->IPaddr << "\"</TD></TR>"
        "<TR><TH ALIGN=LEFT>Administrator rights</TH>"
        "<TD><INPUT TYPE=CHECKBOX NAME=\"miniadmin\" VALUE=\"on\""
        << ((the.managers->flags & Manager::isMinAdmin)
            ? "CHECKED" : "") << "></TD></TR></TABLE>"
        "<INPUT TYPE=submit NAME=\"action\" VALUE=\"Update\">&nbsp;"
        "<INPUT TYPE=submit NAME=\"action\" VALUE=\"Remove\"></FORM><P>"
        "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
        "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << 
        "\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"editHistoryForm\">"
        "<INPUT TYPE=hidden NAME=\"manager\" VALUE=\"" << con.get("manager") <<
        "\"><SELECT NAME=\"messageId\" SIZE=15>";
    the.managerForm = true;
    if (the.managers->messages.length() != 0) { 
        print(con, the.managers->messages);
        con << TAG << 
            "</SELECT><BR><INPUT TYPE=submit NAME=\"action\" VALUE=\"Select\"></FORM>";
    } else { 
        con << TAG << EMPTY_LIST "</FORM>";
    }
    mainMenuReference(con);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -