File tree Expand file tree Collapse file tree 3 files changed +14
-2
lines changed Expand file tree Collapse file tree 3 files changed +14
-2
lines changed Original file line number Diff line number Diff line change @@ -14,6 +14,7 @@ class RPCClient {
1414
1515 RPCClient (ITransport& t) : decoder(&RpcDecoderManager<>::getDecoder(t)) {}
1616
17+ // TODO This is problematic becasue 'new' makes different Transport objs and different transports make different decoders
1718 RPCClient (Stream& stream) {
1819 ITransport* transport = (ITransport*) new SerialTransport (stream);
1920 decoder = &RpcDecoderManager<>::getDecoder (*transport);
Original file line number Diff line number Diff line change @@ -23,6 +23,7 @@ class RpcDecoderManager {
2323 entry.transport = &transport;
2424 // In-place construct
2525 entry.decoder = new (&entry.decoder_storage .instance ) RpcDecoder<>(transport);
26+ decoders_size++;
2627 return *entry.decoder ;
2728 }
2829 }
@@ -31,6 +32,10 @@ class RpcDecoderManager {
3132 while (true );
3233 }
3334
35+ static size_t size () {
36+ return decoders_size;
37+ }
38+
3439private:
3540 struct DecoderStorage {
3641 union {
@@ -49,10 +54,14 @@ class RpcDecoderManager {
4954 };
5055
5156 static std::array<Entry, MaxTransports> decoders_;
57+ static size_t decoders_size;
5258};
5359
5460// Definition of the static member
5561template <size_t MaxTransports>
5662std::array<typename RpcDecoderManager<MaxTransports>::Entry, MaxTransports> RpcDecoderManager<MaxTransports>::decoders_;
5763
64+ template <size_t MaxTransports>
65+ size_t RpcDecoderManager<MaxTransports>::decoders_size = 0 ;
66+
5867#endif // RPCLITE_DECODER_MANAGER_H
Original file line number Diff line number Diff line change @@ -16,6 +16,7 @@ class RPCServer {
1616public:
1717 RPCServer (ITransport& t) : decoder(&RpcDecoderManager<>::getDecoder(t)) {}
1818
19+ // TODO This is problematic becasue 'new' makes different Transport objs and different transports make different decoders
1920 RPCServer (Stream& stream) {
2021 ITransport* transport = (ITransport*) new SerialTransport (stream);
2122 decoder = &RpcDecoderManager<>::getDecoder (*transport);
@@ -34,10 +35,11 @@ class RPCServer {
3435 }
3536
3637protected:
37- void get_rpc () {
38+ bool get_rpc () {
3839 decoder->decode ();
39- if (_rpc_size > 0 ) return ; // Already have a request
40+ if (_rpc_size > 0 ) return true ; // Already have a request
4041 _rpc_size = decoder->get_request (_rpc_buffer, RPC_BUFFER_SIZE);
42+ return _rpc_size > 0 ;
4143 }
4244
4345 void process_request () {
You can’t perform that action at this time.
0 commit comments