PageRenderTime 41ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/1.0/client/src/myleftchatluadb.as

http://as3chat.googlecode.com/
ActionScript | 429 lines | 344 code | 67 blank | 18 comment | 28 complexity | 96959e181503fc470a84ff077d96ca25 MD5 | raw file
  1. package {
  2. import flash.display.Sprite;
  3. import flash.events.Event;
  4. import flash.system.Security;
  5. import org.aswing.AsWingConstants;
  6. import org.aswing.AsWingManager;
  7. import org.aswing.BorderLayout;
  8. import org.aswing.Container;
  9. import org.aswing.FlowLayout;
  10. import org.aswing.GeneralListCellFactory;
  11. import org.aswing.JButton;
  12. import org.aswing.JFrame;
  13. import org.aswing.JLabel;
  14. import org.aswing.JList;
  15. import org.aswing.JOptionPane;
  16. import org.aswing.JPanel;
  17. import org.aswing.JScrollPane;
  18. import org.aswing.JSplitPane;
  19. import org.aswing.JTextArea;
  20. import org.aswing.JTextField;
  21. import org.aswing.JWindow;
  22. import org.aswing.VectorListModel;
  23. import org.aswing.event.AWEvent;
  24. import org.myleft.RoomListCell;
  25. import org.myleft.UserListCell;
  26. import org.myleft.core.SocketConnection;
  27. import org.myleft.data.Define;
  28. import org.myleft.data.User;
  29. import org.myleft.events.SocketConnectionEvent;
  30. public class myleftchatluadb extends Sprite
  31. {
  32. private var socket:SocketConnection;
  33. private var host:String = 'myleft.org';
  34. private var port:int = 8333;
  35. private var autologin:int;
  36. private var timestr:String;
  37. private var account:String;
  38. private var sign:String;
  39. private var myinfo:User;
  40. private var userJlist:JList
  41. private var usermodel:VectorListModel;
  42. private var roomJlist:JList
  43. private var roommodel:VectorListModel;
  44. private var mainWindow:JWindow;
  45. private var loginDialog:LoginJFrame;
  46. private var progressDialog:progressJFrame;
  47. private var chatText:JTextArea;
  48. private var mychatText:JTextArea;
  49. private var messageText:JTextField;
  50. private var toText:JTextField;
  51. private var sendButton:JButton;
  52. private var time:Date;
  53. private var mysound:mySound;
  54. public function myleftchatluadb()
  55. {
  56. AsWingManager.initAsStandard(this);
  57. mysound = new mySound();
  58. time = new Date;
  59. var param:Object = root.loaderInfo.parameters;
  60. autologin = int(param['autologin']);
  61. myinfo = new User;
  62. myinfo.username = param['username'] ? param['username'] : '';
  63. account = param['account']? param['account'] : '';
  64. sign = param['sign']? param['sign'] : '';
  65. timestr = param['timestamp'] ? param['timestamp'] : '';
  66. Security.loadPolicyFile("xmlsocket://"+host+":"+port.toString());
  67. mainWindow = new JWindow();
  68. //??????
  69. var pane:Container = mainWindow.getContentPane();
  70. pane.setLayout(new BorderLayout());
  71. //??????
  72. usermodel = new VectorListModel();
  73. userJlist = new JList(usermodel, new GeneralListCellFactory(UserListCell,false,false));
  74. var userJframe:JFrame = new JFrame(mainWindow, "??????");
  75. userJframe.setClosable(false);
  76. userJframe.setResizable(false);
  77. userJframe.setSizeWH(200, 200);
  78. userJframe.getContentPane().append(new JScrollPane(userJlist));
  79. userJframe.setLocationXY(stage.stageWidth-userJframe.width, 0);
  80. userJframe.show();
  81. //????
  82. roommodel = new VectorListModel();
  83. roomJlist = new JList(roommodel, new GeneralListCellFactory(RoomListCell,false,false));
  84. var roomJframe:JFrame = new JFrame(mainWindow, "????");
  85. roomJframe.setClosable(false);
  86. roomJframe.setResizable(false);
  87. var roomToolJPanel:JPanel = new JPanel();
  88. var getroomlistBtn:JButton = new JButton('????');
  89. getroomlistBtn.pack();
  90. getroomlistBtn.addActionListener(getRoomList);
  91. roomToolJPanel.append(getroomlistBtn);
  92. var joinroomlistBtn:JButton = new JButton('????');
  93. joinroomlistBtn.pack();
  94. joinroomlistBtn.addActionListener(joinRoom);
  95. roomToolJPanel.append(joinroomlistBtn);
  96. roomJframe.setSizeWH(200, 200);
  97. roomJframe.getContentPane().append(roomToolJPanel, BorderLayout.NORTH);
  98. roomJframe.getContentPane().append(new JScrollPane(roomJlist), BorderLayout.CENTER);
  99. roomJframe.setLocationXY(stage.stageWidth-roomJframe.width, userJframe.height);
  100. roomJframe.show();
  101. //????
  102. chatText = new JTextArea;
  103. chatText.setWordWrap(true);
  104. chatText.setEditable(false);
  105. var scrollPane:JScrollPane = new JScrollPane(chatText);
  106. //??
  107. mychatText = new JTextArea;
  108. mychatText.setWordWrap(true);
  109. mychatText.setEditable(false);
  110. var scrollPane2:JScrollPane = new JScrollPane(mychatText);
  111. var centerSplitPanel:JSplitPane = new JSplitPane(AsWingConstants.VERTICAL, false, scrollPane, scrollPane2);
  112. pane.append(centerSplitPanel, BorderLayout.CENTER);
  113. //??
  114. var mlabel:JLabel = new JLabel("????");
  115. messageText = new JTextField;
  116. messageText.setWordWrap(true);
  117. messageText.setPreferredWidth(450);
  118. messageText.addActionListener(sendFun);
  119. sendButton = new JButton('??');
  120. sendButton.pack();
  121. sendButton.addActionListener(sendFun);
  122. var clearButton:JButton = new JButton('????');
  123. clearButton.pack();
  124. clearButton.addActionListener(clearFun);
  125. var quitButton:JButton = new JButton('??');
  126. quitButton.pack();
  127. quitButton.addActionListener(quitFun);
  128. var toolPanel:JPanel = new JPanel(new FlowLayout);
  129. toolPanel.appendAll(mlabel, messageText, sendButton, clearButton, quitButton);
  130. pane.append(toolPanel, BorderLayout.SOUTH);
  131. //???????????
  132. mainWindow.setSizeWH(stage.stageWidth, stage.stageHeight);
  133. //????
  134. mainWindow.show();
  135. loginDialog = new LoginJFrame(mainWindow, "??", true);
  136. loginDialog.pack();
  137. loginDialog.usernameText.setText(myinfo.username);
  138. loginDialog.setLocationXY((stage.stageWidth-loginDialog.width)*0.5, (stage.stageHeight-loginDialog.height)*0.5);
  139. loginDialog.loginButton.addActionListener(loginClickHandle);
  140. loginDialog.anonymousButton.addActionListener(anonymousClickHandle);
  141. loginDialog.connectButton.addActionListener(connectClickHandle);
  142. //???
  143. progressDialog = new progressJFrame(mainWindow, "???");
  144. progressDialog.pack();
  145. progressDialog.setLocationXY((stage.stageWidth-progressDialog.width)*0.5, (stage.stageHeight-progressDialog.height)*0.5);
  146. socket = new SocketConnection;
  147. socket.addEventListener(Define.CONNECT, eventHandle);
  148. socket.addEventListener(Define.CLOSE, eventHandle);
  149. socket.addEventListener(Define.EV_TYPE_AUTH, eventHandle);
  150. socket.addEventListener(Define.EV_TYPE_AUTH_OTHER_LOGIN, eventHandle);
  151. socket.addEventListener(Define.EV_TYPE_USER_LOGIN, eventHandle);
  152. socket.addEventListener(Define.EV_TYPE_USER_LOGOUT, eventHandle);
  153. socket.addEventListener(Define.EV_TYPE_USER_ADD, eventHandle);
  154. socket.addEventListener(Define.EV_TYPE_MESSAGE, eventHandle);
  155. socket.addEventListener(Define.EV_TYPE_CHANGE_ROOM, eventHandle);
  156. socket.addEventListener(Define.EV_TYPE_ROOM_ADD, eventHandle);
  157. if (autologin==1)
  158. {
  159. socket.connect(host, port);
  160. progressDialog.show();
  161. }
  162. else
  163. {
  164. loginDialog.show();
  165. }
  166. stage.addEventListener(Event.RESIZE, resizeHandler);
  167. }
  168. private function eventHandle(e:SocketConnectionEvent):void
  169. {
  170. trace('eventHandle1', e.type);
  171. trace('eventHandle2', e.body.toString());
  172. progressDialog.hide();
  173. var temStr:String;
  174. switch(e.type)
  175. {
  176. case Define.CONNECT:
  177. loginDialog.setConnectEnabled(false);
  178. loginDialog.setLoginEnabled(true);
  179. if (autologin==1)
  180. {
  181. loginFun();
  182. }
  183. break;
  184. case Define.CLOSE:
  185. usermodel.clear();
  186. loginDialog.setConnectEnabled(true);
  187. loginDialog.setLoginEnabled(false);
  188. loginDialog.show();
  189. break;
  190. case Define.EV_TYPE_USER_LOGIN:
  191. trace("?????", e.body.attributes.username, myinfo.username);
  192. if (e.body.attributes.username!=myinfo.username) {
  193. mysound.play(mySound.online);
  194. chatText.setHtmlText( '<font color="#FF9900"><b>' + e.body.attributes.username + '</b></font> ?????' + "<br/>" + chatText.getHtmlText());
  195. }
  196. case Define.EV_TYPE_USER_ADD:
  197. usermodel.append(new User(e.body.attributes.username));
  198. trace("append");
  199. break;
  200. case Define.EV_TYPE_USER_LOGOUT:
  201. chatText.setHtmlText( '<font color="#FF9900"><b>' + e.body.attributes.username + '</b></font> ?????' + "<br/>" + chatText.getHtmlText());
  202. for (var i:int=0;i < usermodel.getSize(); i++)
  203. {
  204. if (User(usermodel.get(i)).username == e.body.attributes.username)
  205. {
  206. usermodel.remove(usermodel.get(i));
  207. break;
  208. }
  209. }
  210. break;
  211. case Define.EV_TYPE_AUTH:
  212. if (e.body.attributes.result==1)
  213. {
  214. progressDialog.hide();
  215. loginDialog.hide();
  216. myinfo.username = e.body.attributes.username;
  217. usermodel.append(new User('???'));
  218. //JOptionPane.showMessageDialog("Hello", "????");
  219. getRoomList(null);
  220. }
  221. else
  222. {
  223. loginDialog.show();
  224. JOptionPane.showMessageDialog("Hello", e.body.attributes.message);
  225. }
  226. break;
  227. case Define.LOGIN_FAILURE:
  228. break;
  229. case Define.EV_TYPE_AUTH_OTHER_LOGIN:
  230. usermodel.clear();
  231. loginDialog.show();
  232. JOptionPane.showMessageDialog("Hello", e.body.attributes.message);
  233. break;
  234. case Define.EV_TYPE_MESSAGE:
  235. var ismy:Boolean = myinfo.username==e.body.attributes.from? true : false;
  236. var istomy:Boolean = myinfo.username==e.body.attributes.to? true : false;
  237. var toString:String =e.body.attributes.to ? ' ? <b>'+ e.body.attributes.to + '</b>' : '';
  238. var date:Date = new Date(int(e.body.attributes.timestamp) * 1000);
  239. var dateStr:String = " (" + date.fullYear + "-" + date.month + "-" + date.day + " " + date.hours + ":" + date.minutes + ")";
  240. var msgStr:String = e.body.firstChild.firstChild.toString();
  241. if (ismy)
  242. {
  243. msgStr = '<font color="#0066FF">' + msgStr + '</font>';
  244. }
  245. if (toString)
  246. {
  247. if (istomy)
  248. {
  249. mysound.play(mySound.msg);
  250. }
  251. mychatText.setHtmlText( '<font color="#FF6600"><b>' + e.body.attributes.from + '</b></font>'+ toString +' ?:' + msgStr + dateStr + "<br/>" + mychatText.getHtmlText());
  252. }
  253. else
  254. {
  255. chatText.setHtmlText( '<font color="#FF6600"><b>' + e.body.attributes.from + '</b></font> ?:' + msgStr + dateStr + "<br/>" + chatText.getHtmlText());
  256. }
  257. break;
  258. case Define.EV_TYPE_CHANGE_ROOM:
  259. chatText.setHtmlText('<font color="#FF9900"><b>?????'+e.body.attributes.name+'</font>');
  260. usermodel.clear();
  261. break;
  262. case Define.EV_TYPE_ROOM_ADD:
  263. roommodel.append(Object({roomid:e.body.attributes.roomid, name:e.body.attributes.name}));
  264. break;
  265. }
  266. }
  267. //??
  268. private function clearFun(e:AWEvent):void
  269. {
  270. mychatText.setHtmlText("");
  271. chatText.setHtmlText("");
  272. }
  273. //??
  274. private function connectClickHandle(e:AWEvent):void
  275. {
  276. if (!socket.socket.connected) {
  277. progressDialog.setTitle('???...');
  278. progressDialog.show();
  279. socket.connect(host, port);
  280. }
  281. }
  282. //??
  283. private function loginClickHandle(e:AWEvent):void
  284. {
  285. myinfo.username = loginDialog.usernameText.getText();
  286. loginFun();
  287. }
  288. //????
  289. private function anonymousClickHandle(e:AWEvent):void
  290. {
  291. progressDialog.setTitle('???...');
  292. progressDialog.show();
  293. //socket.send("<event type='100' anonymous='1'/>");
  294. socket.send("<event type='"+Define.EV_TYPE_AUTH+"' anonymous='1'/>");
  295. }
  296. //??
  297. private function loginFun():void
  298. {
  299. if (socket.socket.connected && myinfo.username.length>0)
  300. {
  301. progressDialog.setTitle('???...');
  302. progressDialog.show();
  303. var temp:String="<event type='"+Define.EV_TYPE_AUTH+"' ";
  304. if (myinfo.username.length>0) temp += "username='"+myinfo.username+"' ";
  305. if (loginDialog.passwordText.getText().length>0) temp += "password='"+loginDialog.passwordText.getText()+"' ";
  306. if (timestr.length>0) temp += "timestamp='"+timestr+"' ";
  307. if (sign.length>0) temp += "sign='"+sign+"'";
  308. if (account.length>0) temp += "account='"+account+"' ";
  309. temp = temp+"/>";
  310. socket.send(temp);
  311. }
  312. else
  313. {
  314. JOptionPane.showMessageDialog("Hello", "??????");
  315. }
  316. }
  317. //??????
  318. private function getRoomList(e:AWEvent):void
  319. {
  320. if (socket.socket.connected)
  321. {
  322. roommodel.clear();
  323. var toStr:String = userJlist.getSelectedValue() && userJlist.getSelectedValue().username!='???' ? "to='"+User(userJlist.getSelectedValue()).username+"'" : '';
  324. socket.send("<event type='"+Define.EV_TYPE_GET_ROOM_LIST+"'/>");
  325. }
  326. }
  327. //????
  328. private function joinRoom(e:AWEvent):void
  329. {
  330. if (socket.socket.connected)
  331. {
  332. if (roomJlist.getSelectedValue())
  333. {
  334. var obj:Object = roomJlist.getSelectedValue();
  335. socket.send("<event type='"+Define.EV_TYPE_CHANGE_ROOM+"' roomid='"+obj.roomid+"'/>");
  336. }
  337. }
  338. }
  339. private function quitFun(e:Event):void
  340. {
  341. if (socket.socket.connected) socket.send('<quit/>');
  342. }
  343. private function sendFun(e:AWEvent):void
  344. {
  345. if (messageText.getText().length>256)
  346. {
  347. JOptionPane.showMessageDialog("Hello", "????????256???");
  348. }
  349. else if (socket.socket.connected && messageText.getText().length>0)
  350. {
  351. var toStr:String = userJlist.getSelectedValue() && userJlist.getSelectedValue().username!='???' ? "to='"+User(userJlist.getSelectedValue()).username+"'" : '';
  352. socket.send("<event type='"+Define.EV_TYPE_MESSAGE+"' "+toStr+"><body><![CDATA["+messageText.getText()+"]]></body></event>");
  353. messageText.setText("");
  354. }
  355. }
  356. private function resizeHandler(e:Event):void
  357. {
  358. loginDialog.setLocationXY((stage.stageWidth-loginDialog.width)*0.5, (stage.stageHeight-loginDialog.height)*0.5);
  359. mainWindow.setSizeWH(stage.stageWidth, stage.stageHeight);
  360. }
  361. }
  362. }