001
002 /**
003 * Title: Advanced Network Client Sample<p>
004 * Description: <p>
005 * Copyright: Copyright (C) 2009 Alexey Veremenko<p>
006 * Company: <p>
007 * @author Alexey Veremenko
008 * @version 1.0
009 */
010 package networking.client;
011
012 import networking.protocol.*;
013
014 /**
015 * ClientTalkThread - this class represents a thread interacting with TalkServer
016 */
017 class ClientTalkThread extends ClientThread
018 {
019 /**
020 * Master client
021 */
022 protected ITalkClient m_master = null;
023
024 /**
025 * Construct new ClientTalkThread object
026 * @param master ITalkClient object
027 */
028 public ClientTalkThread(ITalkClient master)
029 {
030 super(master);
031 m_master = master;
032 }
033
034 /*
035 * Override ClientThread
036 */
037 protected void processMessage(Message msg) throws Exception
038 {
039 switch (msg.getType())
040 {
041 /* Server messages */
042 case Message.ACCEPT:
043 case Message.REJECT:
044 {
045 m_master.onConnect(msg);
046 break;
047 }
048 case Message.TIMEOUT:
049 {
050 throw new Exception("Server has disonnected because of time-out");
051 //break;
052 }
053 case Message.CLIENT_LIST_CHANGED:
054 {
055 m_master.onListChanged(msg);
056 break;
057 }
058 case Message.NEW_MESSAGE:
059 {
060 m_master.onNewMessage(msg);
061 break;
062 }
063 case Message.DEBAR:
064 {
065 m_master.onDebar(msg);
066 break;
067 }
068 case Message.NEW_FILE:
069 {
070 m_master.onNewFile(msg);
071 break;
072 }
073
074 /* Master messages */
075 case Message.HI_TALK:
076 case Message.MESSAGE_SENT:
077 case Message.DEBAR_SENT:
078 case Message.BROADCAST_SENT:
079 case Message.ACCEPT_FILE_SENT:
080 case Message.REJECT_FILE_SENT:
081 {
082 // Route message to server
083 send(msg);
084 break;
085 }
086
087 /* Route other messages to parent */
088 default:
089 {
090 super.processMessage(msg);
091 break;
092 }
093 }
094 }
095
096 /*
097 * Override ClientThread
098 */
099 public void run()
100 {
101 super.run();
102 m_master.onDisconnect();
103 }
104
105 /*
106 * Override ClientThread
107 */
108 protected void error(Exception e)
109 {
110 m_master.error(e);
111 }
112 }
|