// Called when a peer we're trying to connect to sends us a message private void processNewPeer(SocketChannel c) throws IOException { ByteBuffer message = ChannelHelper.readBytes(c, 4); String recognize = utf8.decode(message).toString(); if (!recognize.equals("bam!")) { // Connected to something that wasn't a BAMPong client... c.close(); Peer p = new_peers.remove(c); log("Closing attempt to " + p.getName() + " got " + recognize); return; } // Assemble response ByteBuffer name = utf8.encode(nick); message = ByteBuffer.allocateDirect(name.limit() + 10); // id(4), port(4), name(2+limit) message.putInt(id); message.putInt(getPort()); ChannelHelper.putString(message, name); message.flip(); // Send message c.write(message); // Move socket to connected peers. Peer peer = new_peers.remove(c); peers.put(c, peer); sockets.put(peer, c); }
/** Send a debug message to all connected peers. */ public void sendDebug(String message) throws IOException { ByteBuffer msg = utf8.encode(message); ByteBuffer buff = ByteBuffer.allocateDirect(msg.limit() + 3); buff.put(MSG_DEBUG); ChannelHelper.putString(buff, msg); buff.flip(); for (SocketChannel c : peers.keySet()) { ChannelHelper.sendAll(c, buff); buff.rewind(); } }
// Called when someone who's just connected to us sends a messages private void processNewSocket(SocketChannel c) throws IOException { int id = ChannelHelper.getInt(c); int port = ChannelHelper.getInt(c); String name = ChannelHelper.getString(c); // Move to connected peers lists Peer peer = new Peer(id, name, c.socket().getInetAddress(), port); new_sockets.remove(c); peers.put(c, peer); sockets.put(peer, c); if (listener != null) listener.addPeer(peer); }
/** Send a ball to a peer. */ public void sendBall(Ball b, double position, Peer p) throws IOException { ByteBuffer msg = ByteBuffer.allocateDirect(33); // type(1), id(4), position(8), dx(8), dy(8) msg.put(MSG_BALL); msg.putInt(b.id); msg.putDouble(position); msg.putDouble(b.dx); msg.putDouble(b.dy); msg.putInt(b.D); msg.flip(); SocketChannel sock = sockets.get(p); if (sock == null) throw new IllegalArgumentException("Not connected to peer"); ChannelHelper.sendAll(sock, msg); }
// Called when an established peer sends us a message private void processPeerMessage(SocketChannel c) throws IOException { Peer peer = peers.get(c); ByteBuffer b = ByteBuffer.allocateDirect(1); int read = c.read(b); if (read < 0) { c.close(); return; } if (read < 1) return; // No data? b.flip(); byte type = b.get(); switch (type) { case MSG_DEBUG: log(peer.getName() + ": " + ChannelHelper.getString(c)); break; case MSG_BALL: int id = ChannelHelper.getInt(c); double position = ChannelHelper.getDouble(c); double dx = ChannelHelper.getDouble(c); double dy = ChannelHelper.getDouble(c); int D = ChannelHelper.getInt(c); if (listener != null) listener.receiveBall(id, position, dx, dy, D); break; // Dropped ball // Informative to all peers & server // (Maybe implement as passing ball to server?) // Server may respond with “you lose” // Drop player // Paxos confirmation that client is gone // Heartbeat? // Probably only sent in response to drop // Ping/pong messages // Server failure // All peers, send choice of backup default: System.err.println("Unknown peer message: " + type); } }
@Override public List<AbstractBean> getAllActiveFilterRecords(String array, String field, String username) { List<AbstractBean> retValue = new ArrayList<AbstractBean>(); String query = "select * from tbl_crm_lead where type = 0 and status = ? and userId = ? and " + field + " IN (" + array + ") UNION select * from tbl_crm_lead where leadId IN (select leadId from tbl_crm_share where userId = ?) and type = 0 and status = ? and " + field + " IN (" + array + ");"; try { preparedStatement = DBUtility.connection.prepareStatement(query); preparedStatement.setBoolean(1, true); preparedStatement.setString(2, username); preparedStatement.setString(3, username); preparedStatement.setBoolean(4, true); } catch (SQLException e) { ZLog.err("VNC CRM for Zimbra", "Error in getting all active records in LeadHelper", e); } ResultSet rs = dbu.select(preparedStatement); LeadBean leadBean = null; CountryHelper countryHelper = new CountryHelper(); StateHelper stateHelper = new StateHelper(); ChannelHelper channelHelper = new ChannelHelper(); SectionHelper sectionHelper = new SectionHelper(); CategoryHelper categoryHelper = new CategoryHelper(); PriorityHelper priorityHelper = new PriorityHelper(); StageHelper stageHelper = new StageHelper(); CompanyHelper companyHelper = new CompanyHelper(); LeadClassHelper leadClassHelper = new LeadClassHelper(); try { while (rs.next()) { leadBean = new LeadBean(); leadBean.setLeadId(rs.getInt("leadId")); leadBean.setSubjectName(rs.getString("subjectName")); leadBean.setLeadDescription(rs.getString("leadDescription")); leadBean.setContactName(rs.getString("contactName")); leadBean.setCompanyBean( (CompanyBean) (companyHelper.getRecordById(rs.getString("companyId")))); leadBean.setValuation(rs.getString("valuation")); leadBean.setLeadState(rs.getString("leadState")); leadBean.setLeadClassBean( (LeadClassBean) (leadClassHelper.getRecordById(rs.getString("leadClassId")))); leadBean.setPartnerName(rs.getString("partnerName")); leadBean.setPhone(rs.getString("phone")); leadBean.setFax(rs.getString("fax")); leadBean.setEmail(rs.getString("email")); leadBean.setWorkPhone(rs.getString("workPhone")); leadBean.setMobile(rs.getString("mobile")); leadBean.setStreet1(rs.getString("street1")); leadBean.setStreet2(rs.getString("street2")); leadBean.setCity(rs.getString("city")); leadBean.setZip(rs.getString("zip")); leadBean.setCountryBean( (CountryBean) (countryHelper.getRecordById(rs.getString("countryId")))); leadBean.setStateBean((StateBean) (stateHelper.getRecordById(rs.getString("stateId")))); leadBean.setChannelBean( (ChannelBean) (channelHelper.getRecordById(rs.getString("channelId")))); leadBean.setPriorityBean( (PriorityBean) (priorityHelper.getRecordById(rs.getString("priorityId")))); leadBean.setStageBean((StageBean) (stageHelper.getRecordById(rs.getString("stageId")))); leadBean.setCategoryBean( (CategoryBean) (categoryHelper.getRecordById(rs.getString("categoryId")))); leadBean.setSectionBean( (SectionBean) (sectionHelper.getRecordById(rs.getString("sectionId")))); leadBean.setType(rs.getString("type")); leadBean.setDateOpen(rs.getString("dateOpen")); leadBean.setDateClose(rs.getString("dateClose")); leadBean.setExpectedDateClose(rs.getString("expectedDateClose")); leadBean.setProbability(rs.getString("probability")); leadBean.setDayClose(rs.getString("dayClose")); leadBean.setDayOpen(rs.getString("dayOpen")); leadBean.setReferredBy(rs.getString("referredBy")); leadBean.setUserId(rs.getString("userId")); leadBean.setNextActionDate(rs.getString("nextActionDate")); leadBean.setNextAction(rs.getString("nextAction")); leadBean.setStatus(rs.getBoolean("status")); leadBean.setCreateBy(rs.getString("createBy")); leadBean.setCreateDate(rs.getString("createDate")); leadBean.setWriteBy(rs.getString("writeBy")); leadBean.setWriteDate(rs.getString("writeDate")); retValue.add(leadBean); } } catch (SQLException e) { ZLog.err("VNC CRM for Zimbra", "Error in Lead Helper Class", e); } return retValue; }