Android Socket With NodeJS

MainActivity
package com.buzz.beaconlib;



import android.support.v7.app.ActionBarActivity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.widget.ListView;

import android.widget.TextView;

import android.os.StrictMode;

import android.os.Handler;

import android.app.AlertDialog;

import android.content.DialogInterface;

import android.os.Message;

import android.widget.Button;

import android.view.View;

//import android.util.Log;

import android.widget.ArrayAdapter;



import org.codehaus.jackson.map.ObjectMapper;



import java.io.*;

import java.net.*;

import java.lang.*;

import java.util.*;





public class MainActivity extends ActionBarActivity {



    private static String HOST = "192.168.0.106";

    private static int PORT = 2397;

    static String ActiveCMD = "";



    Socket socket;

    Thread socketMsgThread;

    Handler inHandler;

    Handler resultHandler;

    InputStream in;

    ObjectMapper objectMapper;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);



        Bundle bundle = getIntent().getExtras();

        HOST = bundle.getString("HOST");

        PORT = Integer.parseInt(bundle.getString("PORT"));



        StrictMode.setThreadPolicy(

                new StrictMode

                        .ThreadPolicy

                        .Builder()

                        .detectDiskReads()

                        .detectDiskWrites()

                        .detectNetwork()

                        .penaltyLog()

                        .build());



        StrictMode.setVmPolicy(

                new StrictMode

                        .VmPolicy

                        .Builder()

                        .detectLeakedSqlLiteObjects()

                        .detectLeakedClosableObjects()

                        .penaltyLog()

                        .penaltyDeath()

                        .build());



        final TextView tvHost = (TextView) findViewById(R.id.tvHost);

        tvHost.setText(HOST);



        final TextView tvPort = (TextView) findViewById(R.id.tvPort);

        tvPort.setText(String.valueOf(PORT));



        try {

            socket = new Socket(HOST, PORT);

        } catch (UnknownHostException e) {

            e.printStackTrace();

            ShowDialog(e.getMessage());

        } catch (IOException e) {

            e.printStackTrace();

            ShowDialog(e.getMessage());

        }



        final Button btnGetBeaconInfo = (Button) findViewById(R.id.btnGetBeaconInfo);

        final Button btnGetSysparams = (Button) findViewById(R.id.btnGetSysparams);

        final Button btnGetUserInfo = (Button) findViewById(R.id.btnGetUserInfo);

        final Button btnAddSyslog = (Button) findViewById(R.id.btnAddSyslog);

        final Button btnAddKey = (Button) findViewById(R.id.btnAddKey);

        final Button btnOpen = (Button) findViewById(R.id.btnOpen);

        final Button btnClose = (Button) findViewById(R.id.btnClose);



        btnOpen.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                try {

                    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

                    writer.write(GlobalConst.CMD_OPEN);

                    writer.flush();

                } catch (UnknownHostException e) {

                    e.printStackTrace();

                    ShowDialog(e.getMessage());

                } catch (IOException e) {

                    e.printStackTrace();

                    ShowDialog(e.getMessage());

                }



                ActiveCMD = "06";

            }

        });



        btnClose.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                try {

                    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

                    writer.write(GlobalConst.CMD_CLOSE);

                    writer.flush();

                } catch (UnknownHostException e) {

                    e.printStackTrace();

                    ShowDialog(e.getMessage());

                } catch (IOException e) {

                    e.printStackTrace();

                    ShowDialog(e.getMessage());

                }



                ActiveCMD = "07";

            }

        });



        btnGetBeaconInfo.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                try {

                    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

                    writer.write(GlobalConst.CMD_GET_BEACON_INFO);

                    writer.flush();

                } catch (UnknownHostException e) {

                    e.printStackTrace();

                    ShowDialog(e.getMessage());

                } catch (IOException e) {

                    e.printStackTrace();

                    ShowDialog(e.getMessage());

                }



                ActiveCMD = "01";

            }

        });



        btnGetSysparams.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                try {

                    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

                    writer.write(GlobalConst.CMD_GET_SYS_PARAMS);

                    writer.flush();

                } catch (UnknownHostException e) {

                    e.printStackTrace();

                    ShowDialog(e.getMessage());

                } catch (IOException e) {

                    e.printStackTrace();

                    ShowDialog(e.getMessage());

                }



                ActiveCMD = "02";

            }

        });





        btnGetUserInfo.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                try {

                    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

                    writer.write(GlobalConst.CMD_GET_USER_INFO);

                    writer.flush();

                } catch (UnknownHostException e) {

                    e.printStackTrace();

                    ShowDialog(e.getMessage());

                } catch (IOException e) {

                    e.printStackTrace();

                    ShowDialog(e.getMessage());

                }



                ActiveCMD = "03";

            }

        });





        btnAddSyslog.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                try {

                    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

                    writer.write(GlobalConst.CMD_ADD_SYS_LOG);

                    writer.flush();

                } catch (UnknownHostException e) {

                    e.printStackTrace();

                    ShowDialog(e.getMessage());

                } catch (IOException e) {

                    e.printStackTrace();

                    ShowDialog(e.getMessage());

                }



                ActiveCMD = "04";

            }

        });





        btnAddKey.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                try {

                    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

                    writer.write(GlobalConst.CMD_ADD_KEY);

                    writer.flush();

                } catch (UnknownHostException e) {

                    e.printStackTrace();

                    ShowDialog(e.getMessage());

                } catch (IOException e) {

                    e.printStackTrace();

                    ShowDialog(e.getMessage());

                }



                ActiveCMD = "05";

            }

        });





        objectMapper = new ObjectMapper();



        resultHandler = new Handler() {

            public void handleMessage(Message msg) {

                List<String> ds = new ArrayList<String>();

                switch (msg.what) {

                    case 1:

                        BeaconInfo beaconInfo = (BeaconInfo) msg.obj;

                        ds.add(beaconInfo.getBeacon().get(0).toString());

                        for (triggers t : beaconInfo.getTriggers()) {

                            ds.add(t.toString());

                        }

                        for (contents c : beaconInfo.getContents()) {

                            ds.add(c.toString());

                        }

                        ShowResult(ds);

                        break;



                    case 2:

                        Sysparams[] sysparamsList = (Sysparams[]) msg.obj;

                        for (Sysparams sp : sysparamsList) {

                            ds.add(sp.toString());

                        }

                        ShowResult(ds);

                        break;



                    case 3:

                        UserInfo[] userInfoList = (UserInfo[]) msg.obj;

                        ds.add(userInfoList[0].toString());

                        ShowResult(ds);

                        break;



                    case 4:

                        ShowResult(ds);

                        break;

                }

            }

        };



        inHandler = new Handler() {

            public void handleMessage(Message msg) {

                switch (msg.what) {

                    case 1:

                        TextView tvJsonData = (TextView) findViewById(R.id.tvJsonData);

                        tvJsonData.setText(msg.obj.toString());



                        switch (ActiveCMD) {

                            case "01":

                                try {

                                    BeaconInfo beaconInfo = objectMapper.readValue(msg.obj.toString(), BeaconInfo.class);

                                    Message message = new Message();

                                    message.what = 1;

                                    message.obj = beaconInfo;

                                    resultHandler.sendMessage(message);

                                } catch (IOException ex) {

                                    ShowDialog(ex.toString());

                                    return;

                                }

                                break;



                            case "02":

                                try {

                                    Sysparams[] SysparamsList = objectMapper.readValue(msg.obj.toString(), Sysparams[].class);

                                    Message message = new Message();

                                    message.what = 2;

                                    message.obj = SysparamsList;

                                    resultHandler.sendMessage(message);

                                } catch (IOException ex) {

                                    ShowDialog(ex.toString());

                                    return;

                                }

                                break;



                            case "03":

                                try {

                                    UserInfo[] userInfoList = objectMapper.readValue(msg.obj.toString(), UserInfo[].class);

                                    Message message = new Message();

                                    message.what = 3;

                                    message.obj = userInfoList;

                                    resultHandler.sendMessage(message);

                                } catch (IOException ex) {

                                    ShowDialog(ex.toString());

                                    return;

                                }

                                break;



                            default:

                                Message message = new Message();

                                message.what = 4;

                                resultHandler.sendMessage(message);

                                break;

                        }

                        break;

                    default:

                        break;

                }

            }

        };



        try {

            in = socket.getInputStream();

        } catch (Exception ex) {

            return;

        }

        socketMsgThread = new Thread(runnable);

        socketMsgThread.start();

    }



    Runnable runnable = new Runnable() {

        @Override

        public void run() {

            String line = "";

            while (true) {

                try {

                    byte[] temp = new byte[10240];// 默认最带为256

                    int size = 0;

                    while ((size = in.read(temp)) > 0) {

                        // -1表示文件结尾

                        byte[] res = new byte[size];// 默认最带为256

                        System.arraycopy(temp, 0, res, 0, size);

                        for (int i = 0; i < size; i++) {

                            line += (char) res[i];

                        }



                        Message message = new Message();

                        message.what = 1;

                        message.obj = line;

                        inHandler.sendMessage(message);

                        line = "";

                    }

                } catch (Exception ex) {

                    return;

                }

            }

        }

    };





    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.

        getMenuInflater().inflate(R.menu.menu_main, menu);

        return true;

    }



    @Override

    public boolean onOptionsItemSelected(MenuItem item) {

        // Handle action bar item clicks here. The action bar will

        // automatically handle clicks on the Home/Up button, so long

        // as you specify a parent activity in AndroidManifest.xml.

        int id = item.getItemId();



        //noinspection SimplifiableIfStatement

        if (id == R.id.action_settings) {

            return true;

        }



        return super.onOptionsItemSelected(item);

    }



    private void ShowResult(List<String> ds){

        ListView lvResult = (ListView) findViewById(R.id.lvResult);

        lvResult.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,ds));

    }



    private void ShowDialog(String msg) {

        new AlertDialog

            .Builder(this)

            .setTitle("notification")

            .setMessage(msg)

            .setPositiveButton("ok", new DialogInterface.OnClickListener() {

                @Override

                public void onClick(DialogInterface dialog, int which) {



                }

            }).show();

    }

}

core.js
var net=require('net');

var mysql=require('./mysqlpool.js');

var client=require('./doorclient.js');

var fileserver=require('./fileserver.js');

function execute_command(socket, command, args) {  

    switch(command){

      case "90":

        client.open();

        break;



      case "91":

        client.close();

        break;

        

      case "01":

        mysql.getBeaconInfo(socket,args);

        break;



      case "02":

        mysql.getSysparams(socket);

        break;



      case "03":

        mysql.getUserInfo(socket,args);

        break;



      case "04":

        mysql.addSyslog(socket,args);

        break;



      case "05":

        mysql.addKey(socket,args);

    }

};



var s = net.createServer(function(socket) {

    console.log('server connected');



    socket.on('data', function(d) { 

      data = d.toString('utf8').trim();  

      var cmd_re = /^(\d{2})+[ ]*(.*)/g;

      cmd_match = cmd_re.exec(data)  

      if (cmd_match) {  

        var command = cmd_match[1];  

        var args = cmd_match[2];  

        console.log(command+" "+args);

        execute_command(socket, command, args);  

      } 

    });



    socket.on('end', function() {

      console.log('server disconnected');

    });



    socket.on('error', function (ex) {

      console.log("ignoring exception: " + ex);

    });



});  

s.listen(2397,'192.168.0.106');

console.log('listen on server port:2397...');

 

你可能感兴趣的:(android)