Package devutilsplugin.views

Source Code of devutilsplugin.views.SocketClientView

package devutilsplugin.views;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DropTarget;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.DropTargetListener;
import org.eclipse.swt.dnd.FileTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.part.ViewPart;

import devutilsplugin.utils.ActionNewView;
import devutilsplugin.utils.SocketClient;


public class SocketClientView extends ViewPart {
  public static final String ID = "DevUtilsPlugin.views.SocketClientView";
  final int pad_frame = 10;
  final int pad_ctrl = 5;
 
  IoSession currSession = null;
  final SocketClient client = new SocketClient();

  public SocketClientView() {
  }
 
  void setMultiView(final IViewPart view){
    try {
      Display.getDefault().asyncExec(new Runnable() {
        @Override
        public void run() {
          getViewSite().getPage().hideView(view);
          ActionNewView anv = new ActionNewView(getViewSite().getId());
          anv.run();
        }
      });
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  @Override
  public void createPartControl(final Composite parent) {
    String secondaryId = getViewSite().getSecondaryId();
    if (secondaryId == null) {
      setMultiView(this);
      return;
    }
    FormData layoutData = null;
    FormLayout layout = new FormLayout();
    parent.setLayout(layout);

    SashForm sashHor = new SashForm(parent, SWT.HORIZONTAL);
    sashHor.setLayout(new FormLayout());
   
    // Left
    Composite compositeLeft = new Composite(sashHor, SWT.NONE);
    compositeLeft.setLayout(new FormLayout());
    // Right
    Composite compositeRight = new Composite(sashHor, SWT.NONE);
    compositeRight.setLayout(new FormLayout());

    layoutData = new FormData();
    layoutData.top = new FormAttachment(0, pad_frame);
    layoutData.left = new FormAttachment(0, pad_frame);
    layoutData.right = new FormAttachment(100, -pad_frame);
    layoutData.bottom = new FormAttachment(100, -pad_frame);
    sashHor.setLayoutData(layoutData);
   
    layoutData = new FormData();
    layoutData.top = new FormAttachment(0, pad_frame);
    layoutData.left = new FormAttachment(0, pad_frame);
    layoutData.width = 100;
    layoutData.bottom = new FormAttachment(100, -pad_frame);
    compositeLeft.setLayoutData(layoutData);

    layoutData = new FormData();
    layoutData.top = new FormAttachment(0, pad_frame);
    layoutData.left = new FormAttachment(compositeLeft, pad_ctrl);
    layoutData.right = new FormAttachment(100, -pad_frame);
    layoutData.bottom = new FormAttachment(100, -pad_frame);
    compositeRight.setLayoutData(layoutData);

    final Label lblInfo = new Label(compositeRight, SWT.NONE);
    Label lblRecv = new Label(compositeRight, SWT.NONE);
    Label lblSend = new Label(compositeRight, SWT.NONE);
   
    final Combo cboCharsetOfRecv = new Combo(compositeRight, SWT.BORDER);
    final Combo cboCharsetOfSend = new Combo(compositeRight, SWT.BORDER);
    final Text txtRecv = new Text(compositeRight, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
    final Text txtSend = new Text(compositeRight, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
    final Button btnSend = new Button(compositeRight, SWT.PUSH);
    final Button btnSaveRecvData = new Button(compositeRight, SWT.PUSH);
    final Button btnClearRecvData = new Button(compositeRight, SWT.PUSH);
   
    Label lblConnect = new Label(compositeLeft, SWT.NONE);
    final Text txtHost = new Text(compositeLeft, SWT.BORDER);
    final Text txtPort = new Text(compositeLeft, SWT.BORDER);
    final Button btnConnect = new Button(compositeLeft, SWT.PUSH);
    Label lblSession = new Label(compositeLeft, SWT.NONE);
    final Table tblSession = new Table(compositeLeft, SWT.BORDER | SWT.FULL_SELECTION | SWT.V_SCROLL);
    final Text txtSessionID = new Text(compositeLeft, SWT.BORDER | SWT.READ_ONLY);
    final Button btnCloseSession = new Button(compositeLeft, SWT.PUSH);
    final Button chkSSL = new Button(compositeLeft, SWT.CHECK);
   
    layoutData = new FormData();
    layoutData.top = new FormAttachment(0, 0);
    layoutData.left = new FormAttachment(0, 0);
    chkSSL.setLayoutData(layoutData);
    chkSSL.setText("Use SSL");

    layoutData = new FormData();
    layoutData.top = new FormAttachment(0, 0);
    layoutData.left = new FormAttachment(chkSSL, pad_ctrl);
    lblConnect.setLayoutData(layoutData);
    lblConnect.setText("Connect");
   
    layoutData = new FormData();
    layoutData.top = new FormAttachment(0, 0);
    layoutData.left = new FormAttachment(lblConnect, pad_ctrl);
    layoutData.width = 100;
    txtHost.setLayoutData(layoutData);
    txtHost.setText("127.0.0.1");

    layoutData = new FormData();
    layoutData.top = new FormAttachment(0, 0);
    layoutData.left = new FormAttachment(txtHost, pad_ctrl);
    layoutData.width = 40;
    txtPort.setLayoutData(layoutData);
    txtPort.setText("1234");

    layoutData = new FormData();
    layoutData.top = new FormAttachment(0, 0);
    layoutData.left = new FormAttachment(txtPort, pad_ctrl);
    btnConnect.setLayoutData(layoutData);
    btnConnect.setText("Connect");

    layoutData = new FormData();
    layoutData.top = new FormAttachment(btnConnect, pad_ctrl);
    layoutData.left = new FormAttachment(0, 0);
    lblSession.setLayoutData(layoutData);
    lblSession.setText("Session List");

    layoutData = new FormData();
    layoutData.top = new FormAttachment(btnConnect, pad_ctrl);
    layoutData.left = new FormAttachment(lblSession, pad_ctrl);
    txtSessionID.setLayoutData(layoutData);
    txtSessionID.setText("");

    layoutData = new FormData();
    layoutData.top = new FormAttachment(btnConnect, pad_ctrl);
    layoutData.left = new FormAttachment(txtSessionID, pad_ctrl);
    btnCloseSession.setLayoutData(layoutData);
    btnCloseSession.setText("Close Session");

    layoutData = new FormData();
    layoutData.top = new FormAttachment(btnCloseSession, pad_ctrl);
    layoutData.left = new FormAttachment(0, 0);
    layoutData.right = new FormAttachment(100, -pad_ctrl);
    layoutData.bottom = new FormAttachment(100, 0);
    tblSession.setLayoutData(layoutData);
    tblSession.setLinesVisible(true);
    tblSession.setHeaderVisible(true);
    TableColumn colSession = null;
    colSession = new TableColumn(tblSession, SWT.LEFT);
    colSession.setText("Session ID");
    colSession.setWidth(30);
    colSession = new TableColumn(tblSession, SWT.LEFT);
    colSession.setText("Remote IP");
    colSession.setWidth(80);
    colSession = new TableColumn(tblSession, SWT.LEFT);
    colSession.setText("Remote Port");
    colSession.setWidth(50);
    colSession = new TableColumn(tblSession, SWT.LEFT);
    colSession.setText("Local Port");
    colSession.setWidth(50);
   
    // right
    layoutData = new FormData();
    layoutData.top = new FormAttachment(0, 0);
    layoutData.left = new FormAttachment(0, 0);
    layoutData.right = new FormAttachment(100, 0);
    lblInfo.setLayoutData(layoutData);
    lblInfo.setText("Select Session List!!!");

    layoutData = new FormData();
    layoutData.top = new FormAttachment(lblInfo, pad_ctrl);
    layoutData.left = new FormAttachment(0, 0);
    lblRecv.setLayoutData(layoutData);
    lblRecv.setText("Received Data ");
   
    layoutData = new FormData();
    layoutData.top = new FormAttachment(lblInfo, pad_ctrl);
    layoutData.left = new FormAttachment(lblRecv, pad_ctrl);
    cboCharsetOfRecv.setLayoutData(layoutData);

    layoutData = new FormData();
    layoutData.top = new FormAttachment(lblInfo, pad_ctrl);
    layoutData.left = new FormAttachment(cboCharsetOfRecv, pad_ctrl);
    btnSaveRecvData.setLayoutData(layoutData);
    btnSaveRecvData.setText("Save Data");
   
    layoutData = new FormData();
    layoutData.top = new FormAttachment(lblInfo, pad_ctrl);
    layoutData.left = new FormAttachment(btnSaveRecvData, pad_ctrl);
    btnClearRecvData.setLayoutData(layoutData);
    btnClearRecvData.setText("Clear Data");
   
   
   
    layoutData = new FormData();
    layoutData.top = new FormAttachment(cboCharsetOfRecv, pad_ctrl);
    layoutData.left = new FormAttachment(0, 0);
    layoutData.right = new FormAttachment(100, 0);
    layoutData.bottom = new FormAttachment(50, 0);
    txtRecv.setLayoutData(layoutData);
   
    layoutData = new FormData();
    layoutData.top = new FormAttachment(txtRecv, pad_ctrl);
    layoutData.left = new FormAttachment(0, 0);
    lblSend.setLayoutData(layoutData);
    lblSend.setText("Send Data ");
   
    layoutData = new FormData();
    layoutData.top = new FormAttachment(txtRecv, pad_ctrl);
    layoutData.left = new FormAttachment(lblSend, pad_ctrl);
    cboCharsetOfSend.setLayoutData(layoutData);

    layoutData = new FormData();
    layoutData.top = new FormAttachment(txtRecv, pad_ctrl);
    layoutData.left = new FormAttachment(cboCharsetOfSend, pad_ctrl);
    btnSend.setLayoutData(layoutData);
    btnSend.setText("Send Data");
   
    layoutData = new FormData();
    layoutData.top = new FormAttachment(cboCharsetOfSend, pad_ctrl);
    layoutData.left = new FormAttachment(0, 0);
    layoutData.right = new FormAttachment(100, 0);
    layoutData.bottom = new FormAttachment(100, 0);
    txtSend.setLayoutData(layoutData);
    txtSend.setBackground(new Color(parent.getDisplay(), 243, 246, 250));
    txtSend.setText("GET / HTTP/1.0\r\n\r\n");

    Map<String, Charset> charsets = Charset.availableCharsets();
      Iterator<Charset> iterator = charsets.values().iterator();
    while (iterator.hasNext()) {
      Charset cs = (Charset) iterator.next();
      cboCharsetOfRecv.add(cs.displayName());
      cboCharsetOfSend.add(cs.displayName());
//      System.out.print(cs.displayName());
//      if (cs.isRegistered()) {
//        System.out.print(" (registered): ");
//      } else {
//        System.out.print(" (unregistered): ");
//      }
//      System.out.print(cs.name());
//      Iterator names = cs.aliases().iterator();
//      while (names.hasNext()) {
//        System.out.print(", ");
//        System.out.print(names.next());
//      }
//      System.out.println();
    }
    cboCharsetOfRecv.setText(Charset.defaultCharset().displayName());
    cboCharsetOfSend.setText(Charset.defaultCharset().displayName());
   
    chkSSL.addSelectionListener(new SelectionListener() {
     
      @Override
      public void widgetSelected(SelectionEvent e) {
        boolean bSSL = chkSSL.getSelection();
        client.setSSL(bSSL);
      }
     
      @Override
      public void widgetDefaultSelected(SelectionEvent e) {
        // TODO Auto-generated method stub
       
      }
    });
   
    btnClearRecvData.addSelectionListener(new SelectionListener() {
     
      @Override
      public void widgetSelected(SelectionEvent e) {
        txtRecv.setText("");
        if(currSession != null){
          IoBuffer buf = (IoBuffer)currSession.getAttribute("buffer");
          buf.clear();
        }
      }
     
      @Override
      public void widgetDefaultSelected(SelectionEvent e) {
       
      }
    });
   
    btnSaveRecvData.addSelectionListener(new SelectionListener() {
     
      @Override
      public void widgetSelected(SelectionEvent e) {
        FileDialog dialog = new FileDialog(parent.getShell(), SWT.SAVE);
        String path = dialog.open();
        if(path == null){
          return;
        }
        if(currSession == null){
          return;
        }
        FileOutputStream os = null;
        try {
          os = new FileOutputStream(path);
          byte [] bytes = getRecvData();
//          IoBuffer buf = (IoBuffer)currSession.getAttribute("buffer");
//          int pos = buf.position();
//          int limit = buf.limit();
//         
//          buf.flip();
//          buf.position(0);
//          int len = buf.remaining();
//          System.out.println("len:" + len);
//          byte [] bytes = new byte[len];
//          buf.get(bytes);
//         
//          buf.position(pos);
//          buf.limit(limit);
          os.write(bytes);

        } catch (FileNotFoundException e1) {
          e1.printStackTrace();
        } catch (IOException e2) {
          e2.printStackTrace();
        } finally{
          if(os != null){
            try {
              os.close();
            } catch (IOException e1) {
              e1.printStackTrace();
            }
          }
        }       
      }
     
      @Override
      public void widgetDefaultSelected(SelectionEvent e) {
      }
    });
   
    btnCloseSession.addSelectionListener(new SelectionListener() {
     
      @Override
      public void widgetSelected(SelectionEvent e) {
        txtSessionID.setText("");
        if(currSession != null){
          currSession.close(false);
        }
      }
     
      @Override
      public void widgetDefaultSelected(SelectionEvent e) {
       
      }
    });
   
    btnSend.addSelectionListener(new SelectionListener() {
     
      @Override
      public void widgetSelected(SelectionEvent e) {
        if(currSession == null){
          return;
        }
        try{
          String charset = cboCharsetOfSend.getText();
          String sendData = txtSend.getText();
          byte [] bytes = sendData.getBytes(charset);
          IoBuffer buff = IoBuffer.allocate(bytes.length);
          buff.put(bytes);
          buff.flip();
          currSession.write(buff);
        }catch(Exception e1){
          e1.printStackTrace();
        }
      }
     
      @Override
      public void widgetDefaultSelected(SelectionEvent e) {
       
      }
    });
   
    btnConnect.addSelectionListener(new SelectionListener() {
     
      @Override
      public void widgetSelected(SelectionEvent e) {
        String host = txtHost.getText();
        String strPort = txtPort.getText();
       
        try {
          int port = Integer.parseInt(strPort);
          client.connect(host, port);

        } catch (Exception e1) {
          e1.printStackTrace();
        }
      }
     
      @Override
      public void widgetDefaultSelected(SelectionEvent e) {
       
      }
    });
   
    tblSession.addSelectionListener(new SelectionListener() {
     
      @Override
      public void widgetSelected(SelectionEvent e) {
        int idx = tblSession.getSelectionIndex();
        IoSession session = (IoSession)tblSession.getItem(idx).getData("session");
        currSession = session;
        lblInfo.setText("Session ID:" + session.getId());
        txtSessionID.setText("" + session.getId());
        byte [] bytes = getRecvData();
        String charset = cboCharsetOfRecv.getText();
        String recvData = "";
        try {
          recvData = new String(bytes, charset);
        } catch (UnsupportedEncodingException e1) {
          e1.printStackTrace();
        }
        txtRecv.setText(recvData);
      }
     
      @Override
      public void widgetDefaultSelected(SelectionEvent e) {
       
      }
    });
   
    DropTargetListener dtl = new DropTargetListener() {

      @Override
      public void dropAccept(DropTargetEvent event) {
      }

      @Override
      public void drop(DropTargetEvent event) {
        if (FileTransfer.getInstance().isSupportedType(
            event.currentDataType)) {
            String[] files = (String[]) event.data;
          //for (int i = 0; i < files.length; i++) {
          for (int i = 0; i < 1; i++) {
            File fd = new File(files[i]);
            FileInputStream is = null;
            try {
              is = new FileInputStream(fd);
              byte byteData[] = new byte[(int) fd.length()];
              is.read(byteData);
             
              IoBuffer buff = IoBuffer.allocate(byteData.length);
              buff.put(byteData);
              buff.flip();
             
              currSession.write(buff);
            } catch (Exception e) {
              e.printStackTrace();
            } finally{
              if(is != null){
                try {
                  is.close();
                } catch (IOException e) {
                  e.printStackTrace();
                }
              }
            }
           
          }
        }
      }

      @Override
      public void dragOver(DropTargetEvent event) {
      }

      @Override
      public void dragOperationChanged(DropTargetEvent event) {
      }

      @Override
      public void dragLeave(DropTargetEvent event) {
      }

      @Override
      public void dragEnter(DropTargetEvent event) {
        if (event.detail == DND.DROP_DEFAULT) {
          if ((event.operations & DND.DROP_COPY) != 0) {
            event.detail = DND.DROP_COPY;
          } else {
            event.detail = DND.DROP_NONE;
          }
        }
      }
    };
    DropTarget dropTarget = new DropTarget(txtSend, DND.DROP_COPY
        | DND.DROP_DEFAULT);
    Transfer[] transfers = new Transfer[] { FileTransfer.getInstance() };

    dropTarget.setTransfer(transfers);
    dropTarget.addDropListener(dtl);

   

    client.setHandler(new IoHandler() {
     
      @Override
      public void sessionOpened(IoSession session) throws Exception {
       
      }
     
      @Override
      public void sessionIdle(IoSession session, IdleStatus idle) throws Exception {
       
      }
     
      @Override
      public void sessionCreated(final IoSession session) throws Exception {
        long id = session.getId();
       
        System.out.println("[id:" + id + "]sessionCreated");
        session.setAttribute("buffer", IoBuffer.allocate(1024));
        parent.getDisplay().syncExec(new Runnable() {
          @Override
          public void run() {
            InetSocketAddress remoteAddr = (InetSocketAddress)session.getRemoteAddress();
            InetSocketAddress localAddr = (InetSocketAddress)session.getLocalAddress();
            String sessionID = "" + session.getId();
            String remoteIP = remoteAddr.getAddress().getHostAddress();
            String remotePort = "" + remoteAddr.getPort();
            String localPort = "" + localAddr.getPort();
           
            TableItem item = new TableItem(tblSession, SWT.NONE);
            item.setText(0, sessionID);
            item.setText(1, remoteIP);
            item.setText(2, remotePort);
            item.setText(3, localPort);
            item.setData("session", session);
          }
        });
      }
     
      @Override
      public void sessionClosed(final IoSession session) throws Exception {
        long id = session.getId();
        System.out.println("[id:" + id + "]sessionClosed");
       
       
        parent.getDisplay().syncExec(new Runnable() {
          @Override
          public void run() {
            TableItem [] items = tblSession.getItems();
            for(int i=0; i<items.length; i++){
              TableItem item = items[i];
              IoSession sessionOfTable = (IoSession)item.getData("session");
              if(session.getId() == sessionOfTable.getId()){
                tblSession.remove(i);
                break;
              }
            }

          }
        });
       
       
        if(currSession.getId() == session.getId()){
         
//          IoBuffer buf = (IoBuffer)session.getAttribute("buffer");
//          String charset = cboCharsetOfRecv.getText();
//          buf.flip();
//          int len = buf.remaining();
//          System.out.println("len:" + len);
//          byte [] bytes = new byte[len];
//          buf.get(bytes);
//          final String msg = new String(bytes, charset);
//          System.out.println(msg);
         
  //        for(int i=0; i<bytes.length; i++){
  //          String a = String.format("%02X", bytes[i]);
  //          System.out.println(a);
  //        }
         
          //String msg = buf.getString(Charset.defaultCharset().newDecoder());
          //System.out.println(msg);
          final byte [] bytes = getRecvData();

          // UI Control
          parent.getDisplay().syncExec(new Runnable() {
            @Override
            public void run() {
//              txtRecv.setText(msg);

              String charset = cboCharsetOfRecv.getText();
              String recvStr = "";
              try {
                recvStr = new String(bytes, charset);
              } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
              }
              txtRecv.setText(recvStr);

             
             
            }
          });
        }
      }
     
      @Override
      public void messageSent(IoSession session, Object message) throws Exception {
        long id = session.getId();
        System.out.println("[id:" + id + "]messageSent");
      }
     
      @Override
      public void messageReceived(IoSession session, Object message) throws Exception {
        long id = session.getId();
        System.out.println("[id:" + id + "]messageReceived");
        IoBuffer msg = (IoBuffer)message;
        IoBuffer buf = (IoBuffer)session.getAttribute("buffer");
        if (buf.remaining() < msg.limit()) {
          int bufCapacity = buf.capacity() + (msg.limit() - buf.remaining());
          buf.capacity(bufCapacity);
          buf.limit(bufCapacity);
        }
        buf.put((IoBuffer)message);
       
        if(currSession.getId() == session.getId()){
         
          final byte [] bytes = getRecvData();
         
//          int pos = buf.position();
//          int limit = buf.limit();
//         
//          buf.flip();
//          buf.position(0);
//          int len = buf.remaining();
//          System.out.println("len:" + len);
//          byte [] bytes = new byte[len];
//          buf.get(bytes);
//          final String recvStr = new String(bytes);
//          buf.position(pos);
//          buf.limit(limit);
         
  //        for(int i=0; i<bytes.length; i++){
  //          String a = String.format("%02X", bytes[i]);
  //          System.out.println(a);
  //        }
         
          //String msg = buf.getString(Charset.defaultCharset().newDecoder());
          //System.out.println(msg);
          // UI Control
          parent.getDisplay().syncExec(new Runnable() {
            @Override
            public void run() {
              String charset = cboCharsetOfRecv.getText();
              String recvStr = "";
              try {
                recvStr = new String(bytes, charset);
              } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
              }
              txtRecv.setText(recvStr);
            }
          });
        }
       
       
       
      }
     
      @Override
      public void exceptionCaught(IoSession session, Throwable t)
          throws Exception {
       
      }
    });
  }

  @Override
  public void setFocus() {

  }
 
  @Override
  public void dispose() {
    client.dispose();
    super.dispose();
  }
 
  private byte [] getRecvData(){
    if(currSession == null){
      return null;
    }
     
    IoBuffer buf = (IoBuffer)currSession.getAttribute("buffer");
   
    int pos = buf.position();
    int limit = buf.limit();
   
    buf.flip();
    buf.position(0);
    int len = buf.remaining();
    byte [] bytes = new byte[len];
    buf.get(bytes);
   
    buf.position(pos);
    buf.limit(limit);   
    return bytes;
  }

}
TOP

Related Classes of devutilsplugin.views.SocketClientView

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.