src/net/java/otr4j/OtrEngineImpl.java
changeset 810 0ff0059f2ec3
child 815 ca323cff3ac9
equal deleted inserted replaced
797:fbd3585af53e 810:0ff0059f2ec3
       
     1 /*
       
     2  * otr4j, the open source java otr librar
       
     3  *
       
     4  * Distributable under LGPL license.
       
     5  * See terms of license at gnu.org.
       
     6  */
       
     7 
       
     8 package net.java.otr4j;
       
     9 
       
    10 import java.security.PublicKey;
       
    11 import java.util.Hashtable;
       
    12 import java.util.List;
       
    13 import java.util.Map;
       
    14 import java.util.Vector;
       
    15 
       
    16 import net.java.otr4j.session.Session;
       
    17 import net.java.otr4j.session.SessionID;
       
    18 import net.java.otr4j.session.SessionImpl;
       
    19 import net.java.otr4j.session.SessionStatus;
       
    20 
       
    21 /**
       
    22  * 
       
    23  * @author George Politis
       
    24  * 
       
    25  */
       
    26 public class OtrEngineImpl implements OtrEngine {
       
    27 
       
    28 	public OtrEngineImpl(OtrEngineHost listener) {
       
    29 		if (listener == null)
       
    30 			throw new IllegalArgumentException("OtrEgineHost is required.");
       
    31 
       
    32 		this.setListener(listener);
       
    33 	}
       
    34 
       
    35 	private OtrEngineHost listener;
       
    36 	private Map<SessionID, Session> sessions;
       
    37 
       
    38 	private Session getSession(SessionID sessionID) {
       
    39 
       
    40 		if (sessionID == null || sessionID.equals(SessionID.Empty))
       
    41 			throw new IllegalArgumentException();
       
    42 
       
    43 		if (sessions == null)
       
    44 			sessions = new Hashtable<SessionID, Session>();
       
    45 
       
    46 		if (!sessions.containsKey(sessionID)) {
       
    47 			Session session = new SessionImpl(sessionID, getListener());
       
    48 			sessions.put(sessionID, session);
       
    49 
       
    50 			session.addOtrEngineListener(new OtrEngineListener() {
       
    51 
       
    52 				public void sessionStatusChanged(SessionID sessionID) {
       
    53 					for (OtrEngineListener l : listeners)
       
    54 						l.sessionStatusChanged(sessionID);
       
    55 				}
       
    56 			});
       
    57 
       
    58 		}
       
    59 
       
    60 		return sessions.get(sessionID);
       
    61 	}
       
    62 
       
    63 	public SessionStatus getSessionStatus(SessionID sessionID) {
       
    64 		return this.getSession(sessionID).getSessionStatus();
       
    65 	}
       
    66 
       
    67 	public String transformReceiving(SessionID sessionID, String msgText) {
       
    68 		try {
       
    69 			return this.getSession(sessionID).transformReceiving(msgText);
       
    70 		} catch (OtrException e) {
       
    71 			listener.showError(sessionID, e.getMessage());
       
    72 			return null;
       
    73 		}
       
    74 	}
       
    75 
       
    76 	public String transformSending(SessionID sessionID, String msgText) {
       
    77 		try {
       
    78 			return this.getSession(sessionID).transformSending(msgText, null);
       
    79 		} catch (OtrException e) {
       
    80 			listener.showError(sessionID, e.getMessage());
       
    81 			return null;
       
    82 		}
       
    83 	}
       
    84 
       
    85 	public void endSession(SessionID sessionID) {
       
    86 		try {
       
    87 			this.getSession(sessionID).endSession();
       
    88 		} catch (OtrException e) {
       
    89 			listener.showError(sessionID, e.getMessage());
       
    90 		}
       
    91 	}
       
    92 
       
    93 	public void startSession(SessionID sessionID) {
       
    94 		try {
       
    95 			this.getSession(sessionID).startSession();
       
    96 		} catch (OtrException e) {
       
    97 			listener.showError(sessionID, e.getMessage());
       
    98 		}
       
    99 	}
       
   100 
       
   101 	private void setListener(OtrEngineHost listener) {
       
   102 		this.listener = listener;
       
   103 	}
       
   104 
       
   105 	private OtrEngineHost getListener() {
       
   106 		return listener;
       
   107 	}
       
   108 
       
   109 	public void refreshSession(SessionID sessionID) {
       
   110 		try {
       
   111 			this.getSession(sessionID).refreshSession();
       
   112 		} catch (OtrException e) {
       
   113 			listener.showError(sessionID, e.getMessage());
       
   114 		}
       
   115 	}
       
   116 
       
   117 	public PublicKey getRemotePublicKey(SessionID sessionID) {
       
   118 		return this.getSession(sessionID).getRemotePublicKey();
       
   119 	}
       
   120 
       
   121 	private List<OtrEngineListener> listeners = new Vector<OtrEngineListener>();
       
   122 
       
   123 	public void addOtrEngineListener(OtrEngineListener l) {
       
   124 		synchronized (listeners) {
       
   125 			if (!listeners.contains(l))
       
   126 				listeners.add(l);
       
   127 		}
       
   128 
       
   129 	}
       
   130 
       
   131 	public void removeOtrEngineListener(OtrEngineListener l) {
       
   132 		synchronized (listeners) {
       
   133 			listeners.remove(l);
       
   134 		}
       
   135 	}
       
   136 }