PY-21488 Stopping docker debug process unexpectedly in the very beginning of Python...
[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       onSocketException();
34     }
35     catch (IOException e) {
36       LOG.debug(e);
37     }
38     return false;
39   }
40
41   protected abstract boolean sendMessageImpl(byte[] packed) throws IOException;
42
43   protected abstract void onSocketException();
44
45   public static void logFrame(ProtocolFrame frame, boolean out) {
46     if (LOG.isDebugEnabled()) {
47       LOG.debug(String.format("%1$tH:%1$tM:%1$tS.%1$tL %2$s %3$s\n", new Date(), (out ? "<<<" : ">>>"), frame));
48     }
49   }
50 }