~ubuntu-branches/ubuntu/precise/primrose/precise

« back to all changes in this revision

Viewing changes to minorGems/network/p2pParts/MessagePerSecondLimiter.h

  • Committer: Bazaar Package Importer
  • Author(s): Paul Wise
  • Date: 2009-04-06 19:26:56 UTC
  • Revision ID: james.westby@ubuntu.com-20090406192656-cri7503gebyvfl8t
Tags: upstream-5+dfsg1
ImportĀ upstreamĀ versionĀ 5+dfsg1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Modification History
 
3
 *
 
4
 * 2003-October-9   Jason Rohrer
 
5
 * Created.
 
6
 *
 
7
 * 2003-October-12   Jason Rohrer
 
8
 * Switched to a floating point limit.
 
9
 *
 
10
 * 2004-January-2   Jason Rohrer
 
11
 * Added seprate mutex for transmission function to prevent UI freeze.
 
12
 */
 
13
 
 
14
 
 
15
 
 
16
#ifndef MESSAGE_PER_SECOND_LIMITER_INCLUDED_H
 
17
#define MESSAGE_PER_SECOND_LIMITER_INCLUDED_H
 
18
 
 
19
 
 
20
 
 
21
#include "minorGems/system/MutexLock.h"
 
22
 
 
23
 
 
24
 
 
25
/**
 
26
 * Class that limits the number of messages transmitted per second.
 
27
 *
 
28
 * @author Jason Rohrer
 
29
 */
 
30
class MessagePerSecondLimiter {
 
31
 
 
32
 
 
33
        
 
34
    public:
 
35
 
 
36
 
 
37
        
 
38
        /**
 
39
         * Constructs a limiter.
 
40
         *
 
41
         * @param inLimitPerSecond the maximum number of messages
 
42
         *   transmitted per second, or -1 for no limit.
 
43
         *   Defaults to -1.
 
44
         */        
 
45
        MessagePerSecondLimiter( double inLimitPerSecond = -1 );
 
46
 
 
47
 
 
48
        
 
49
        ~MessagePerSecondLimiter();
 
50
 
 
51
        
 
52
        
 
53
        /**
 
54
         * Sets the limit.
 
55
         *
 
56
         * Thread safe.
 
57
         *
 
58
         * @param inLimitPerSecond the maximum number of messages
 
59
         *   transmitted per second, or -1 for no limit.
 
60
         */        
 
61
        void setLimit( double inLimitPerSecond );
 
62
 
 
63
 
 
64
        
 
65
        /**
 
66
         * Gets the limit.
 
67
         *
 
68
         * Thread safe.
 
69
         *
 
70
         * @return the maximum number of messages
 
71
         *   transmitted per second, or -1 if no limit set.
 
72
         */        
 
73
        double getLimit();
 
74
 
 
75
        
 
76
 
 
77
        /**
 
78
         * Called by a message transmitter to indicate that a message
 
79
         * is about to be transmitted.  Will block if messages
 
80
         * are being transmitted too frequently.
 
81
         *
 
82
         * Thread safe.
 
83
         */
 
84
        void messageTransmitted();
 
85
        
 
86
 
 
87
        
 
88
    protected:
 
89
        MutexLock *mLock;
 
90
        MutexLock *mTransmitLock;
 
91
        
 
92
        double mLimitPerSecond;
 
93
        unsigned long  mMillisecondsBetweenMessages;
 
94
 
 
95
        unsigned long mSecondTimeOfLastMessage;
 
96
        unsigned long mMillisecondTimeOfLastMessage;
 
97
 
 
98
 
 
99
        
 
100
    };
 
101
 
 
102
 
 
103
 
 
104
#endif