void MessageOverlay::AddMessage(const std::string& message, Color color) { std::stringstream smessage (message); std::vector<std::string> strs; std::string str; while (getline(smessage, str)) strs.push_back(str); for (size_t i = 0; i < strs.size(); i++) messages.push_back(MessageOverlayItem(strs[i], color)); if (messages.size() > (unsigned)message_max) { messages.pop_front(); } dirty = true; }
/* handles the mouse and keyboard events that happen in one of the message windows. For key events, if the event is within the team or all window then it will automatically start the message for you, with destination to the player's team or ALL, respectively. If it's a button event, it will scroll the message window back, forward, or to start (left, right, and middle button respectively). It beeps if there is no messages to scroll (ie at the top or bottom already). [BDyess] 12/07/93 */ void messageWinEvent(W_Event *evt) { W_Window window = evt->Window; int key = evt->key; if (!W_IsMapped(window)) return; if (evt->type == W_EV_KEY) { if (key == ('e' + 128)) { /* erase window [BDyess] */ W_ClearWindow(window); } else if (window == messWin[WALL].window) { smessage_ahead('A', key); } else if (window == messWin[WTEAM].window) { smessage_ahead('T', key); } else { smessage(key); } } }
int main (int argc, char *argv[]) { zmq::context_t context(1); // Socket to receive messages on zmq::socket_t receiver(context, ZMQ_PULL); receiver.connect("tcp://localhost:5557"); // Socket to send messages to zmq::socket_t sender(context, ZMQ_PUSH); sender.connect("tcp://localhost:5558"); // Process tasks forever while (1) { zmq::message_t message; int workload; // Workload in msecs receiver.recv(&message); std::string smessage(static_cast<char*>(message.data()), message.size()); std::istringstream iss(smessage); iss >> workload; // Do the work s_sleep(workload); // Send results to sink message.rebuild(); sender.send(message); // Simple progress indicator for the viewer std::cout << "." << std::flush; } return 0; }
void get_N_dispatch_outfit_event(int *team, int *s_type, int *lastplayercount) { W_Event event; int validshipletter = 0; static int resetting = 0; int oldresetting; int i; oldresetting = resetting; W_NextEvent(&event); switch ((int) event.type) { case W_EV_KEY: { struct shiplist *shipscan; validshipletter = 0; shipscan = shiptypes; while (shipscan) { if (shipscan->ship->s_letter == event.key) { *s_type = shipscan->ship->s_type; validshipletter = 1; break; } shipscan = shipscan->next; } } if (me->p_status == PTQUEUE) { for (i = 0; i < WNUM; i++) { if (event.Window == messWin[i].window) { messageWinEvent(&event); break; } } if (i != WNUM) break; if (event.Window == messagew || event.Window == tstatw || event.Window == warnw) smessage(event.key); } if (event.Window == motdWin) { motdWinEvent(&event); break; } else if (event.Window == playerw || event.Window == infow) { /* allow 'i' 'I' and '^i' in playerw [BDyess] */ playerwEvent(&event); break; } else if (event.Window == w || event.Window == mapw) { switch (event.key) { #ifdef Q_OUTFITTING case 'q': *team = number_of_teams; me->p_status = PFREE; break; #endif /* Q_OUTFITTING */ case 'R': warning("Are you sure you want to reset your stats?"); resetting = 1; break; case 'y': if (resetting) { sendResetStatsReq('Y'); warning("OK, your stats have been reset."); resetting = 0; } break; case 'n': if (resetting) { warning("I didn't think so."); resetting = 0; } break; case 'f': /* Scroll motd forward */ if (currpage == NULL) currpage = motddata; if (currpage == NULL || currpage->next == NULL) break; currpage->next->prev = currpage; currpage = currpage->next; showMotd(w); resetting = 0; break; case 'b': /* Scroll motd backward */ if (currpage == NULL || currpage->prev == NULL) break; currpage = currpage->prev; showMotd(w); resetting = 0; break; /* ok, let's have some info windows available on the TQ */ default: /* hmm, something that doesn't have to do with the MOTD, maybe it's an info window request */ switch (doKeymap(&event)) { case 'U': /* U = Rank list */ if (W_IsMapped(rankw)) { W_UnmapWindow(rankw); } else { W_MapWindow(rankw); } break; case 'P': /* P = Planet list */ if (W_IsMapped(planetw)) { W_UnmapWindow(planetw); W_UnmapWindow(planetw2); } else { W_MapWindow(planetw); W_MapWindow(planetw2); } break; case 'h': /* h = Map help window */ if (W_IsMapped(helpWin)) { W_UnmapWindow(helpWin); } else { W_MapWindow(helpWin); } if (optionWin) optionredrawtarget(helpWin); break; case 'O': /* O = options Window */ if (optionWin != NULL && W_IsMapped(optionWin)) optiondone(); else optionwindow(); break; case 'w': /* w = map war stuff */ if (W_IsMapped(war)) W_UnmapWindow(war); else warwindow(); break; case '&': if (defaultsFile) { char buf[150]; sprintf(buf, "Reading defaults from %s", defaultsFile); warning(buf); freeDefaults(); defaultsFile = initDefaults(defaultsFile); resetDefaults(); } else { warning("No defaults file to read from!"); } } break; } break; /* switch event type */ } if (event.Window == qwin) return; /* normal keypresses can't make you quit */ if (event.Window == optionWin) { optionaction(&event); return; } if (!validshipletter) break; /* it wasn't the main window, see if they hit the key in a team window to choose their ship... falling through */ case W_EV_BUTTON: for (i = 0; i < number_of_teams; i++) if (event.Window == teamWin[i]) { *team = i; break; } if (event.Window == qwin) { *team = number_of_teams; me->p_status = PFREE; break; } /* allow message scrollback [BDyess] */ for (i = 0; i < WNUM; i++) { if (event.Window == messWin[i].window) { messageWinEvent(&event); break; } } /* allow bozo selection in playerw [BDyess] */ if (event.Window == playerw) { playerwEvent(&event); break; } else if (event.Window == war) waraction(&event); else if (event.Window == optionWin) optionaction(&event); else if (event.Window == motdWin) motdWinEvent(&event); else if (event.Window == w) { W_Window tmp = motdWin; motdWin = w; motdWinEvent(&event); motdWin = tmp; } if (*team != -1 && !teamRequest(*team, *s_type)) { *team = -1; } break; case W_EV_EXPOSE: for (i = 0; i < number_of_teams; i++) if (event.Window == teamWin[i]) { lastplayercount[i] = -1; /* force update */ redrawTeam(teamWin[i], i, &lastplayercount[i]); break; } if (event.Window == qwin) redrawQuit(); else if (event.Window == w) showMotd(w); else if (event.Window == mapw) { showValues(mapw); redraw_death_messages(); } else /* let the normal expose handler figure out who to redraw */ dispatch_W_expose_event(&event); break; case W_EV_KILL_WINDOW: /* WM_DESTROY_WINDOW support [BDyess] */ if(event.Window == baseWin) exit(0); else W_UnmapWindow(event.Window); break; } if (oldresetting && resetting) { resetting = 0; warning("Resetting of stats cancelled"); } }