Architecture Net

       

Комната для дискуссий: пример чат-программы


Пример чат-программы EventOeTO иллюстрирует архитектуру как сервера, так и клиента В сервере реализованы следующие методы

  • JomChat,
  • QuitChat;
  • ShowMembers
  • Когда в программе регистрируется новый участник или уходит зарегистрированный, сервер посылает сообщение об этом клиенту Обработчик соответствующего события выводит на экран надлежащее сообщение Приведем пример выдачи программы

    sender = 01 Chat Room, Michael has joined the chat
    sender = 01 Chat Room, BOD has -oned the chat
    sender = 01 Chat Room, Sam nas ]oinea tne chat
    --- After 3 nave joined---
    Michael
    Bob
    Sam
    sender = 01 Chat Room, BOD has qait the chat
    --- After 1 has quit---
    Michael
    Sam

    А вот и перевод:

    отправитель = Комчата для дискуссий 01, Майкл присоединился к чату
    отправитель = Комната для дискуссий 01, Боб присоединился к чату
    отправителе = Коуната для дискуссий 01, Сэм присоединился к чату
    ---После того, как 3 присоединились---
    Майкл
    Боб
    Сэм
    отправитель = Комната дгя дискуссий 01, Боб оставил чат
    ---После того, как 1 покинул---
    Майкл
    Сэм

    Исходный код клиента

    В клиенте реализованы обработчики событий. Прежде всего, клиент создает экземпляр серверного объекта, а затем ставит в соответствие каждому событию обработчик события Затем клиент вызывает методы сервера Эти вызовы приводят к генерации сервером событий, обрабатываемых соответствующими обработчиками событии клиента

    //ChatClient.h
    _gc class ChatClient
    // класс сборщика мусора ChatClient
    {
    public:
    static void OnJoinChat(Object *pSender, ChatEventArg *pe)
    {
    Console::WrxteLine
    {
    "sender = {0}, {1} has joined the chat",
    // "отправитель = {0}, {1} присоединился к чату ",


    pSender,
    pe->pName ;
    }
    static void OnQuitChat(Object *pSender, ChatEventArg *pe)
    {
    Console::WriteLine(
    "sender = 40}, {1} has quit the chat", // "отправитель = {0}, {1} покинул чат ",
    pSender, pe->pName);
    }
    static void Main()
    {
    // создать сервер чата
    ChatServer *pChat = new ChatServer("01 Chat Room");


    // "Комната для дискуссий 01"
    // Регистрация обработчиков сообщений от сервера
    pChat->pJoin += new JoinHandler(pChat, OnJoinChat);
    pChat->pQuit += new QuitHandler(pChat, OnQuitChat);
    // вызвать методы сервера
    pChat->JoinChat("Michael"); // Майкл
    pChat->JoinChat/'Bob"); // Боб
    pChat->JoinChat("Sam"); // Сэм
    pChat->ShowMembers("After 3 have joined");
    // "После того, как 3 присоединились"
    pChat->QuitChat("Bob"); // Боб
    pChat->ShowMembers("After 1 has quit");
    // "После того, как 1 ушел"
    }
    };



    Содержание раздела