EMANE  1.2.1
fadingselectionevent.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017 - Adjacent Link LLC, Bridgewater, New Jersey
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  * * Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in
13  * the documentation and/or other materials provided with the
14  * distribution.
15  * * Neither the name of Adjacent Link LLC nor the names of its
16  * contributors may be used to endorse or promote products derived
17  * from this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
22  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
23  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
24  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
25  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30  * POSSIBILITY OF SUCH DAMAGE.
31  */
32 
34 
35 #include "fadingselectionevent.pb.h"
36 
37 class EMANE::Events::FadingSelectionEvent::Implementation
38 {
39 public:
40  Implementation(const FadingSelections & selections):
41  selections_{selections}{}
42 
44  {
45  return selections_;
46  }
47 
48 private:
49  FadingSelections selections_;
50 };
51 
54 {
56 
57  if(!msg.ParseFromString(serialization))
58  {
59  throw SerializationException("unable to deserialize : FadingSelectionEvent");
60  }
61 
62  FadingSelections selections;
63 
64  for(const auto & entry : msg.entries())
65  {
66  FadingModel fadingModel{};
67 
68  switch(entry.model())
69  {
70  case EMANEMessage::FadingSelectionEvent::TYPE_NONE:
71  fadingModel = FadingModel::NONE;
72  break;
73  case EMANEMessage::FadingSelectionEvent::TYPE_NAKAGAMI:
74  fadingModel = FadingModel::NAKAGAMI;
75  break;
76  default:
77  break;
78  }
79 
80  selections.push_back({static_cast<EMANE::NEMId>(entry.nemid()),fadingModel});
81  }
82 
83  pImpl_.reset(new Implementation{selections});
84 }
85 
88  pImpl_{new Implementation{selections}}{}
89 
92  pImpl_{new Implementation{rhs.getFadingSelections()}}{}
93 
95 {
96  pImpl_.reset(new Implementation{rhs.getFadingSelections()});
97  return *this;
98 }
99 
101  Event{IDENTIFIER},
102  pImpl_{new Implementation{{}}}
103 {
104  rval.pImpl_.swap(pImpl_);
105 }
106 
108 {
109  rval.pImpl_.swap(pImpl_);
110  return *this;
111 }
112 
114 
116 {
117  return pImpl_->getFadingSelections();
118 }
119 
121 {
122  Serialization serialization;
123 
125 
126  for(auto & selection : pImpl_->getFadingSelections())
127  {
128  auto pFadingSelectionMessage = msg.add_entries();
129 
130  pFadingSelectionMessage->set_nemid(selection.getNEMId());
131 
132  switch(selection.getFadingModel())
133  {
134  case FadingModel::NONE:
135  pFadingSelectionMessage->set_model(EMANEMessage::FadingSelectionEvent::TYPE_NONE);
136  break;
138  pFadingSelectionMessage->set_model(EMANEMessage::FadingSelectionEvent::TYPE_NAKAGAMI);
139  break;
140  default:
141  throw SerializationException("unable to serialize : FadingSelectionEvent unknown model");
142  break;
143  }
144  }
145 
146  if(!msg.SerializeToString(&serialization))
147  {
148  throw SerializationException("unable to serialize : FadingSelectionEvent");
149  }
150 
151  return serialization;
152 }
std::string Serialization
Definition: serializable.h:42
const FadingSelections & getFadingSelections() const
SerializationException is thrown when an exception occurs during serialization or deserialization of ...
Event interface is the base for all events.
Definition: event.h:46
An fading selection event is used to set the fading model for one or more NEMs.
FadingSelectionEvent & operator=(const FadingSelectionEvent &rhs)
std::uint16_t NEMId
Definition: types.h:52
std::list< FadingSelection > FadingSelections
Serialization serialize() const override
FadingSelectionEvent(const Serialization &serialization)