Port::Port(NetVis &v, unsigned n):
netvis(v),
number(n),
+ registered(false),
mesh((GL::COLOR4_UBYTE, GL::VERTEX2))
{
char buf[128];
addr.sin_addr.s_addr = 0;
int err = getnameinfo(reinterpret_cast<sockaddr *>(&addr), sizeof(sockaddr_in), 0, 0, buf, sizeof(buf), 0);
if(err==0)
+ {
name = buf;
+ registered = !isdigit(name[0]);
+ }
else
- name = Msp::lexical_cast(number);
+ name = Msp::lexical_cast<string>(number);
const map<unsigned, Port *> &ports = netvis.get_ports();
unsigned tries = 100;
- if(ports.size()>100 && number>=1024)
+ if(ports.size()>100 && !registered)
tries = 10000/ports.size()+1;
float best_score = 0;
for(unsigned i=0; (i<tries && best_score<1); ++i)
c.b = rand()*1.0/RAND_MAX;
float high = max(max(c.r, c.g), c.b);
c = c*(1.0/high);
- if(number<1024)
+ if(registered)
{
float low = min(min(c.r, c.g), c.b);
c = (c+-low)*(1/(1-low));
float score = 2;
for(map<unsigned, Port *>::const_iterator j=ports.begin(); j!=ports.end(); ++j)
{
- if(number<1024 && j->first>1024)
+ if(registered && !j->second->is_registered())
break;
const GL::Color &other = j->second->get_color();
float dr = c.r-other.r;
bld.end();
}
+void Port::set_name(const string &n)
+{
+ name = n;
+}
+
+void Port::add_activity(unsigned bytes)
+{
+ activity.add_bytes(bytes);
+}
+
+void Port::tick(const Time::TimeDelta &dt)
+{
+ activity.tick(dt);
+}
+
void Port::render() const
{
- GL::PushMatrix push_;
+ GL::MatrixStack::Push push_(GL::MatrixStack::modelview());
mesh.draw();
- GL::translate(16, 1, 0);
- GL::scale_uniform(10);
- GL::Immediate imm((GL::COLOR4_UBYTE, GL::TEXCOORD2, GL::VERTEX2));
- netvis.get_font().draw_string(name, imm);
+ {
+ GL::Immediate imm((GL::COLOR4_UBYTE, GL::VERTEX2));
+ imm.begin(GL::QUADS);
+ imm.color(color.r, color.g, color.b, color.a);
+ unsigned x = static_cast<unsigned>(activity.get_average()/4096);
+ imm.vertex(14, 0);
+ imm.vertex(14+x, 0);
+ imm.vertex(14+x, 10);
+ imm.vertex(14, 10);
+ imm.end();
+ }
+ GL::MatrixStack::modelview() *= GL::Matrix::translation(16, 1, 0);
+ GL::MatrixStack::modelview() *= GL::Matrix::scaling(10);
+ netvis.get_font().draw_string(name);
GL::Texture::unbind();
}