1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.example.imagine.step1.server;
21
22 import org.apache.mina.core.service.IoHandlerAdapter;
23 import org.apache.mina.core.session.IoSession;
24 import org.apache.mina.example.imagine.step1.ImageRequest;
25 import org.apache.mina.example.imagine.step1.ImageResponse;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28
29 import java.awt.Color;
30 import java.awt.Font;
31 import java.awt.Graphics;
32 import java.awt.image.BufferedImage;
33
34
35
36
37
38
39
40 public class ImageServerIoHandler extends IoHandlerAdapter {
41
42 private final static String characters = "mina rocks abcdefghijklmnopqrstuvwxyz0123456789";
43
44 public static final String INDEX_KEY = ImageServerIoHandler.class.getName() + ".INDEX";
45
46 private static Logger LOGGER = LoggerFactory.getLogger(ImageServerIoHandler.class);
47
48
49
50
51
52
53 public void sessionOpened(IoSession session) throws Exception {
54 session.setAttribute(INDEX_KEY, 0);
55 }
56
57
58
59
60
61
62
63 public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
64 LOGGER.warn(cause.getMessage(), cause);
65 }
66
67
68
69
70
71
72 public void messageReceived(IoSession session, Object message) throws Exception {
73 ImageRequest request = (ImageRequest) message;
74 String text1 = generateString(session, request.getNumberOfCharacters());
75 String text2 = generateString(session, request.getNumberOfCharacters());
76 BufferedImage image1 = createImage(request, text1);
77 BufferedImage image2 = createImage(request, text2);
78 ImageResponse response = new ImageResponse(image1, image2);
79 session.write(response);
80 }
81
82
83
84
85
86
87
88
89
90
91
92 private BufferedImage createImage(ImageRequest request, String text) {
93 BufferedImage image = new BufferedImage(request.getWidth(), request.getHeight(), BufferedImage.TYPE_BYTE_INDEXED);
94 Graphics graphics = image.createGraphics();
95 graphics.setColor(Color.YELLOW);
96 graphics.fillRect(0, 0, image.getWidth(), image.getHeight());
97 Font serif = new Font("serif", Font.PLAIN, 30);
98 graphics.setFont(serif);
99 graphics.setColor(Color.BLUE);
100 graphics.drawString(text, 10, 50);
101 return image;
102 }
103
104
105
106
107
108
109
110
111
112
113
114
115
116 private String generateString(IoSession session, int length) {
117 Integer index = (Integer) session.getAttribute(INDEX_KEY);
118 StringBuffer buffer = new StringBuffer(length);
119 while (buffer.length() < length) {
120 buffer.append(characters.charAt(index));
121 index++;
122 if (index >= characters.length()) {
123 index = 0;
124 }
125 }
126 session.setAttribute(INDEX_KEY, index);
127 return buffer.toString();
128 }
129
130 }