agent.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:6k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 1997 University of Southern California.
  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.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *      This product includes software developed by the Information Sciences
  16.  *      Institute of the University of Southern California.
  17.  * 4. Neither the name of the University nor of the Institute may be used
  18.  *    to endorse or promote products derived from this software without
  19.  *    specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  * @(#) $Header: /cvsroot/nsnam/nam-1/agent.h,v 1.21 2005/02/07 20:47:41 haldar Exp $ (LBL)
  34.  */
  35. #ifndef nam_agent_h
  36. #define nam_agent_h
  37. #include <tclcl.h>
  38. #include "animation.h"
  39. #include "trafficsource.h"
  40. class Queue;
  41. class Edge;
  42. class Feature;
  43. class Node;
  44. class NetView;
  45. //class PSView;
  46. class Monitor;
  47. #define SOURCE 10
  48. #define DESTINATION 20
  49. class Agent : public Animation, public TclObject {
  50. public:
  51.   virtual int classid() const { return ClassAgentID; }
  52.   inline const char* name() const { return (label_); }
  53.   inline int num() const { return (number_); }
  54.   inline int number() const { return (number_); }
  55.   inline void setNumber(int number) {number_ = number;}
  56.   inline double size() const { return (size_); }
  57.   virtual void size(double s);
  58.   virtual void reset(double);
  59.   virtual double x() const { return (x_); }
  60.   virtual  double y() const { return (y_); }
  61.   inline double width()  {return width_;}
  62.   inline double height() {return height_;}
  63.   virtual void findClosestCornertoPoint(double x, double y, 
  64.                double &corner_x, double &corner_y) const = 0; 
  65.   virtual void place(double x, double y);
  66.   void label(const char* name, int anchor);
  67.   void color(const char* name);
  68.   inline int anchor() const { return (anchor_); }
  69.   inline void anchor(int v) { anchor_ = v; }
  70.   inline Agent *next() const { return next_;}
  71.   inline void next(Agent *a) { next_=a;}
  72.   inline Edge *edge() const { return edge_;}
  73.   inline double angle() const { return angle_;}
  74.   inline void angle(double a) { angle_=a;}
  75.   virtual float distance(float x, float y) const;
  76.   void flowcolor(const char* color);
  77.   inline void windowInit(int size) { windowInit_ = size;}
  78.   inline void window(int size) { window_ = size;}
  79.   inline void maxcwnd(int size) { maxcwnd_ = size;}
  80.   void tracevar(const char* var);
  81.   inline void startAt(float time) { start_ = time;}
  82.   inline void stopAt(float time) { stop_ = time;}
  83.   inline void produce(int number) { produce_ = number;}
  84.   inline void packetSize(int size) { packetSize_ = size;}
  85.   inline void interval(float size) { interval_ = size;}
  86.   inline float startAt() { return start_;}
  87.   inline float stopAt() { return stop_;}
  88.   inline int produce() { return produce_;}
  89.   TrafficSource * addTrafficSource(TrafficSource * ts);
  90.   TrafficSource * removeTrafficSource(TrafficSource * ts);
  91.   void add_feature(Feature *f);
  92.   Feature *find_feature(char *) const;
  93.   void delete_feature(Feature *f);
  94.   const char* info() const;
  95.   const char* getname() const;
  96.   void monitor(Monitor *m, double now, char *result, int len);
  97.   inline int marked() const { return (mark_); }
  98.   inline void mark(int v) { mark_ = v; }
  99.   virtual void update_bb();
  100.   void showLink() {draw_link_ = true;}
  101.   void hideLink() {draw_link_ = false;}
  102.   int writeNsDefinitionScript(FILE * file);
  103.   int writeNsConnectionScript(FILE * file);
  104.   int saveAsEnam(FILE *file);
  105.   const char* property();
  106.   Agent * next_;
  107.   Node* node_;
  108.   int AgentRole_;
  109.   Agent * AgentPartner_;
  110.   TrafficSource * traffic_sources_;  // This list is modified by
  111.                                      // add(remove)TrafficSource
  112.   bool draw_link_;
  113. protected:
  114.   Agent(const char * type, int id, double _size);
  115.   Agent(const char* name, double _size);
  116.   void drawlabel(View*) const;
  117.   int number_;
  118.   double size_;
  119.   double x_, y_;
  120.   double width_;
  121.   double height_;
  122.   Feature* features_;
  123.   Edge* edge_;
  124.   double angle_;
  125.   int anchor_;
  126.   int mark_;
  127.   char* label_;
  128.   char * color_;
  129.   // Following is used by Nam Editor to store data to 
  130.   // be sent to ns
  131.   int window_, windowInit_, maxcwnd_;
  132.   int packetSize_;
  133.   float interval_;
  134.   char * tracevar_;
  135.   char * flowcolor_;
  136.   float start_, stop_;
  137.   int produce_;
  138. private:
  139.   void setDefaults();
  140. };
  141. class BoxAgent : public Agent {
  142. public:
  143.   BoxAgent(const char * type, int id, double size);
  144.   BoxAgent(const char* name, double size);
  145.   virtual void size(double s);
  146.   virtual void draw(View * nv, double time);
  147.   //  virtual void draw(PSView*, double now) const;
  148.   virtual void place(double x, double y);
  149.   int inside(double, float, float) const;
  150.   virtual void update_bb();
  151.   virtual void findClosestCornertoPoint(double x, double y, double &corner_x,
  152.                                 double &corner_y) const; 
  153.   void setWidth(double w) {width_ = w;}
  154.   void setHeight(double h) {height_ = h;}
  155.   virtual double x() const {return x0_;}
  156.   virtual double y() const {return y0_;}
  157. private:
  158.   double x0_, y0_;
  159. //  double x1_, y1_;
  160. };
  161. #endif