private void login() { String username = JOptionPane.showInputDialog("请输入用户名"); String password = JOptionPane.showInputDialog("请输入密码"); Message message = new Message( MessageHeader.builder() .type(MessageType.LOGIN) .sender(username) .timestamp(System.currentTimeMillis()) .build(), password.getBytes(charset)); try { clientChannel.write(ByteBuffer.wrap(ProtoStuffUtil.serialize(message))); } catch (IOException e) { e.printStackTrace(); } this.username = username; }
@Override public void handle(Message message, Selector server, SelectionKey client, BlockingQueue<Task> queue, AtomicInteger onlineUsers) { try { byte[] response = ProtoStuffUtil.serialize( new Response( ResponseHeader.builder() .type(ResponseType.NORMAL) .sender(message.getHeader().getSender()) .timestamp(message.getHeader().getTimestamp()).build(), message.getBody())); super.broadcast(response,server); } catch (IOException e) { e.printStackTrace(); } } }
baos.close(); Message message = ProtoStuffUtil.deserialize(bytes, Message.class); MessageHandler messageHandler = SpringContextUtil.getBean("MessageHandler", message.getHeader().getType().toString().toLowerCase()); try { messageHandler.handle(message, selector, key, downloadTaskQueue, onlineUsers);
@Override public void handle(Message message, Selector server, SelectionKey client, BlockingQueue<Task> queue, AtomicInteger onlineUsers) throws InterruptedException { TaskDescription taskDescription = ProtoStuffUtil.deserialize(message.getBody(), TaskDescription.class); Task task = new Task((SocketChannel) client.channel(), taskDescription.getType(), taskDescription.getDesc(), message); try { queue.put(task); log.info("{}已放入阻塞队列",task.getReceiver().getRemoteAddress()); }catch (IOException e) { e.printStackTrace(); } } }
public void handle(SocketChannel channel,Message message) { try { byte[] response = ProtoStuffUtil.serialize( new Response( ResponseHeader.builder() .type(ResponseType.PROMPT) .sender(message.getHeader().getSender()) .timestamp(message.getHeader().getTimestamp()).build(), PromptMsgProperty.SERVER_ERROR.getBytes(PromptMsgProperty.charset))); channel.write(ByteBuffer.wrap(response)); } catch (IOException e) { e.printStackTrace(); } } }
try { SocketChannel clientChannel = (SocketChannel) client.channel(); MessageHeader header = message.getHeader(); SocketChannel receiverChannel = userManager.getUserChannel(header.getReceiver()); if (receiverChannel == null) { ResponseHeader.builder() .type(ResponseType.PROMPT) .sender(message.getHeader().getSender()) .timestamp(message.getHeader().getTimestamp()) .build(), PromptMsgProperty.RECEIVER_LOGGED_OFF.getBytes(PromptMsgProperty.charset))); ResponseHeader.builder() .type(ResponseType.NORMAL) .sender(message.getHeader().getSender()) .timestamp(message.getHeader().getTimestamp()) .build(), message.getBody())); log.info("已转发给",receiverChannel); receiverChannel.write(ByteBuffer.wrap(response));
.type(ResponseType.PROMPT) .responseCode(ResponseCode.LOGOUT_SUCCESS.getCode()) .sender(message.getHeader().getSender()) .timestamp(message.getHeader().getTimestamp()).build(), PromptMsgProperty.LOGOUT_SUCCESS.getBytes(PromptMsgProperty.charset))); clientChannel.write(ByteBuffer.wrap(response)); .type(ResponseType.NORMAL) .sender(SYSTEM_SENDER) .timestamp(message.getHeader().getTimestamp()).build(), String.format(PromptMsgProperty.LOGOUT_BROADCAST, message.getHeader().getSender()).getBytes(PromptMsgProperty.charset))); super.broadcast(logoutBroadcast, server); log.info("客户端退出");
private void logout() { if (!isLogin) { return; } System.out.println("客户端发送下线请求"); Message message = new Message( MessageHeader.builder() .type(MessageType.LOGOUT) .sender(username) .timestamp(System.currentTimeMillis()) .build(), null); try { clientChannel.write(ByteBuffer.wrap(ProtoStuffUtil.serialize(message))); } catch (IOException e) { e.printStackTrace(); } }
@Override public void handle(Message message, Selector server, SelectionKey client, BlockingQueue<Task> queue, AtomicInteger onlineUsers) throws InterruptedException { SocketChannel clientChannel = (SocketChannel) client.channel(); MessageHeader header = message.getHeader(); String username = header.getSender(); String password = new String(message.getBody(),PromptMsgProperty.charset); try { if (userManager.login(clientChannel, username, password)) { ResponseHeader.builder() .type(ResponseType.PROMPT) .sender(message.getHeader().getSender()) .timestamp(message.getHeader().getTimestamp()) .responseCode(ResponseCode.LOGIN_SUCCESS.getCode()).build(), String.format(PromptMsgProperty.LOGIN_SUCCESS,onlineUsers.incrementAndGet()).getBytes(PromptMsgProperty.charset))); .type(ResponseType.NORMAL) .sender(SYSTEM_SENDER) .timestamp(message.getHeader().getTimestamp()).build(), String.format(PromptMsgProperty.LOGIN_BROADCAST, message.getHeader().getSender()).getBytes(PromptMsgProperty.charset))); super.broadcast(loginBroadcast,server); .type(ResponseType.PROMPT) .responseCode(ResponseCode.LOGIN_FAILURE.getCode()) .sender(message.getHeader().getSender()) .timestamp(message.getHeader().getTimestamp()).build(), PromptMsgProperty.LOGIN_FAILURE.getBytes(PromptMsgProperty.charset))); clientChannel.write(ByteBuffer.wrap(response));
@Override public void uncaughtException(Thread t, Throwable e) { try { if (e instanceof TaskException) { TaskException taskException = (TaskException) e; Task task = taskException.getInfo(); Message message = task.getMessage(); byte[] response = ProtoStuffUtil.serialize( new Response( ResponseHeader.builder() .type(ResponseType.PROMPT) .sender(message.getHeader().getSender()) .timestamp(message.getHeader().getTimestamp()).build(), PromptMsgProperty.TASK_FAILURE.getBytes(PromptMsgProperty.charset))); log.info("返回任务执行失败信息"); task.getReceiver().write(ByteBuffer.wrap(response)); } } catch (IOException e1) { e1.printStackTrace(); } } }
String[] slices = content.split(":"); String receiver = slices[0].substring(1); message = new Message( MessageHeader.builder() .type(MessageType.NORMAL) TaskDescription taskDescription = new TaskDescription(TaskType.valueOf(info.substring(0,split).toUpperCase()), info.substring(split+1)); message = new Message( MessageHeader.builder() .type(MessageType.TASK) } else { message = new Message( MessageHeader.builder() .type(MessageType.BROADCAST)
MessageHeader header = info.getMessage().getHeader(); Request request = RequestParser.parse(info.getDesc()); List<String> urls = ImageURLCrawlerUtil.crawl(request);
@Override protected Response process() throws IOException { MessageHeader header = info.getMessage().getHeader(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); System.out.println(info); if (!manager.copyStream(info.getDesc(), baos)) { throw new TaskException(info); } log.info("下载图片成功"); byte[] bytes = baos.toByteArray(); baos.close(); return new Response(ResponseHeader.builder() .type(ResponseType.FILE) .sender(header.getSender()) .timestamp(header.getTimestamp()) .build(), bytes); }