Changeset 38:128b9ced9779 in xplra


Ignore:
Timestamp:
02/14/13 16:02:05 (11 years ago)
Author:
István Váradi <ivaradi@…>
Branch:
default
hg-Phase:
(<MercurialRepository 3 'hg:/home/ivaradi/xplane/hg/xplra' '/'>, 'public')
Message:

Added basic support for showing a message

Files:
4 added
7 edited

Legend:

Unmodified
Added
Removed
  • misc/client.py

    r10 r38  
    415415            print >> sys.stderr, "Invalid dataref at #%d" % (index,)
    416416        elif result!=0:
     417            print >> sys.stderr, "Error code:", result
     418
     419    def do_show_message(self, args):
     420        words = self._splitArgs(args)
     421        if len(words)<2:
     422            print >> sys.stderr, "Missing parameters"
     423            return False
     424
     425        message = words[0]
     426        duration = float(words[1])
     427
     428        self._writeU8(0x41)
     429        self._writeString(message)
     430        self._writeFloat(duration)
     431        self._flush()
     432
     433        result = self._readU8()
     434        if result!=0:
    417435            print >> sys.stderr, "Error code:", result
    418436
  • src/plugin/src/xplra/ListenThread.h

    r36 r38  
    4444//------------------------------------------------------------------------------
    4545
     46class MessageWindow;
     47
     48//------------------------------------------------------------------------------
     49
    4650/**
    4751 * The thread that listens to incoming connections and starts the
     
    6266     */
    6367    int xplmVersion;
     68
     69    /**
     70     * The message window for showing messages.
     71     */
     72    MessageWindow& messageWindow;
    6473
    6574    /**
     
    8392     * Construct the thread.
    8493     */
    85     ListenThread(int xplaneVersion, int xplmVersion);
     94    ListenThread(int xplaneVersion, int xplmVersion,
     95                 MessageWindow& messageWindow);
    8696
    8797    /**
     
    8999     */
    90100    void getVersions(int& xplane, int& xplm) const;
     101
     102    /**
     103     * Get the message window.
     104     */
     105    MessageWindow& getMessageWindow();
    91106
    92107    /**
     
    105120//------------------------------------------------------------------------------
    106121
    107 inline ListenThread::ListenThread(int xplaneVersion, int xplmVersion) :
     122inline ListenThread::ListenThread(int xplaneVersion, int xplmVersion,
     123                                  MessageWindow& messageWindow) :
    108124    Thread(true),
    109125    xplaneVersion(xplaneVersion),
    110126    xplmVersion(xplmVersion),
     127    messageWindow(messageWindow),
    111128    quitEvent(&waiter)
    112129{
     
    119136    xplane = xplaneVersion;
    120137    xplm = xplmVersion;
     138}
     139
     140//------------------------------------------------------------------------------
     141
     142inline MessageWindow& ListenThread::getMessageWindow()
     143{
     144    return messageWindow;
    121145}
    122146
  • src/plugin/src/xplra/Makefile.am

    r13 r38  
    33AM_CXXFLAGS=$(VSCPL_CFLAGS) $(LIBXPLCOMMON_CFLAGS)
    44
    5 AM_CPPFLAGS=-DXPLM210
     5AM_CPPFLAGS=-DXPLM100
    66
    77SRCS= \
     
    1616        MultiTaskRequest.cc             \
    1717        GetMultiDataRefRequest.cc       \
    18         SetMultiDataRefRequest.cc
     18        SetMultiDataRefRequest.cc       \
     19        MessageWindow.cc                \
     20        MessageRequest.cc
    1921
    2022noinst_HEADERS= \
     
    3133        MultiTaskRequest.h              \
    3234        GetMultiDataRefRequest.h        \
    33         SetMultiDataRefRequest.h
     35        SetMultiDataRefRequest.h        \
     36        MessageWindow.h                 \
     37        MessageRequest.h
    3438
    3539if TARGET_API_POSIX
  • src/plugin/src/xplra/Protocol.h

    r36 r38  
    9797
    9898    /**
     99     * Command: show a message in the message window.
     100     */
     101    static const uint8_t COMMAND_SHOW_MESSAGE = 0x41;
     102
     103    /**
    99104     * Data type: int
    100105     */
     
    165170     */
    166171    static const uint8_t RESULT_INVALID_ID = 0x07;
     172
     173    /**
     174     * Result code: invalid duration
     175     */
     176    static const uint8_t RESULT_INVALID_DURATION = 0x08;
    167177
    168178    /**
     
    181191     */
    182192    static const size_t MAX_MULTI_COUNT = 1024;
     193
     194    /**
     195     * The maximal message duration
     196     */
     197    static const float MAX_MESSAGE_DURATION = 5*60;
    183198
    184199    /**
  • src/plugin/src/xplra/ServerThread.cc

    r36 r38  
    3939#include "GetMultiDataRefRequest.h"
    4040#include "SetMultiDataRefRequest.h"
     41#include "MessageRequest.h"
    4142
    4243#include <hu/varadiistvan/xplcommon/Util.h>
     
    152153        } else if (command==Protocol::COMMAND_GET_VERSIONS) {
    153154            if (!handleGetVersions()) break;
     155        } else if (command==Protocol::COMMAND_SHOW_MESSAGE) {
     156            if (!handleShowMessage()) break;
    154157        } else {
    155158            stream.writeU8(Protocol::RESULT_INVALID_COMMAND);
     
    400403    stream.writeS32(xplmVersion);
    401404    stream.writeS32(Protocol::version);
     405
     406    return true;
     407}
     408
     409//------------------------------------------------------------------------------
     410
     411bool ServerThread::handleShowMessage()
     412{
     413    string message = stream.readString();
     414    float duration = stream.readFloat();
     415    if (!stream) return false;
     416
     417    if (duration>Protocol::MAX_MESSAGE_DURATION) {
     418        stream.writeU8(Protocol::RESULT_INVALID_DURATION);
     419    } else {
     420        MessageRequest request(listenThread.getMessageWindow(), message, duration);
     421        if (!requestQueue.execute(&request)) return false;
     422
     423        stream.writeU8(Protocol::RESULT_OK);
     424    }
    402425
    403426    return true;
  • src/plugin/src/xplra/ServerThread.h

    r36 r38  
    241241     */
    242242    bool handleGetVersions();
     243
     244    /**
     245     * Handle the COMMAND_SHOW_MESSAGE command
     246     *
     247     * @return true, if we can continue, false if the thread should quit
     248     */
     249    bool handleShowMessage();
    243250};
    244251
  • src/plugin/src/xplra/plugin.cc

    r36 r38  
    3131#include "ListenThread.h"
    3232
     33#include "MessageWindow.h"
     34
    3335#include <hu/varadiistvan/xplcommon/Util.h>
    3436#include <hu/varadiistvan/scpl/config.h>
     
    4951
    5052using xplra::ListenThread;
     53using xplra::MessageWindow;
    5154
    5255using hu::varadiistvan::xplcommon::Util;
    5356
    5457//------------------------------------------------------------------------------
     58
     59/**
     60 * The window to display messages from the clients.
     61 */
     62static MessageWindow* messageWindow = 0;
    5563
    5664/**
     
    8997    XPLMGetVersions(&xplaneVersion, &xplmVersion, &hostID);
    9098
    91     listenThread = new ListenThread(xplaneVersion, xplmVersion);
     99    messageWindow = new MessageWindow();
     100
     101    listenThread = new ListenThread(xplaneVersion, xplmVersion,
     102                                    *messageWindow);
    92103    listenThread->start();
    93104}
     
    108119    Util::debug("hu.varadiistvan.xplra.XPluginDisable called\n");
    109120    // XPLMUnregisterFlightLoopCallback(&callback, 0);
     121
    110122    if (listenThread!=0) {
    111123        listenThread->quit();
    112124        listenThread = 0;
    113125    }
     126
     127    delete messageWindow; messageWindow = 0;
    114128}
    115129
Note: See TracChangeset for help on using the changeset viewer.