d1bef3683246245c3fe96c0bdc0c3c4a98ddc1ab
[idea/community.git] / python / pydevSrc / com / jetbrains / python / debugger / pydev / transport / BaseDebuggerTransport.java
1 package com.jetbrains.python.debugger.pydev.transport;
2
3 import com.intellij.openapi.diagnostic.Logger;
4 import com.jetbrains.python.debugger.pydev.ProtocolFrame;
5 import com.jetbrains.python.debugger.pydev.RemoteDebugger;
6 import org.jetbrains.annotations.NotNull;
7
8 import java.io.IOException;
9 import java.net.SocketException;
10 import java.util.Date;
11
12 /**
13  * @author Alexander Koshevoy
14  */
15 public abstract class BaseDebuggerTransport implements DebuggerTransport {
16   private static final Logger LOG = Logger.getInstance(BaseDebuggerTransport.class);
17
18   protected final Object mySocketObject = new Object();
19
20   @NotNull protected final RemoteDebugger myDebugger;
21
22   protected BaseDebuggerTransport(@NotNull RemoteDebugger debugger) {myDebugger = debugger;}
23
24   @Override
25   public boolean sendFrame(@NotNull final ProtocolFrame frame) {
26     logFrame(frame, true);
27
28     try {
29       final byte[] packed = frame.pack();
30       return sendMessageImpl(packed);
31     }
32     catch (SocketException se) {
33       myDebugger.disconnect();
34       myDebugger.fireCommunicationError();
35     }
36     catch (IOException e) {
37       LOG.debug(e);
38     }
39     return false;
40   }
41
42   protected abstract boolean sendMessageImpl(byte[] packed) throws IOException;
43
44   public static void logFrame(ProtocolFrame frame, boolean out) {
45     if (LOG.isDebugEnabled()) {
46       LOG.debug(String.format("%1$tH:%1$tM:%1$tS.%1$tL %2$s %3$s\n", new Date(), (out ? "<<<" : ">>>"), frame));
47     }
48   }
49 }