使用socket.io将客户端应用程序Android连接到使用Sails.js编写的服务器

时间:2015-07-02 14:07:25

标签: android angularjs sockets socket.io sails.js

这是我的情况:我有一个用sails.js编写的服务器,我有一个用户模型。我有一个仪表板,我可以看到所有用户,创建新的,删除它们等等...现在我想创建一个Android应用程序,我可以得到,使用socket.io,通知有关用户的事件模型。 示例:如果我从仪表板中删除用户,我希望应用程序从服务器返回用户已被删除的通知。

这是我的应用代码:

公共类MainActivity扩展了Activity {

//socket instance
private Socket mSocket;
{
    try {
        mSocket = IO.socket("http://server_url:port/user");
    } catch (URISyntaxException e) {
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); //set the layout for this activity

    final TextView tv = (TextView) findViewById(R.id.textView);

    mSocket.on("user", new Emitter.Listener() {
        @Override
        public void call(Object... args) {
            tv.setVisibility(View.INVISIBLE);
        }
    });

    mSocket.connect();

    final Button btn_createUser = (Button)findViewById(R.id.button);
    btn_createUser.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mSocket.connected()) {
                //tv.setVisibility(View.INVISIBLE);
            }
        }
    });
}

}

就像我使用仪表板将套接字连接到服务器一样,我在这里做了同样的事情,但似乎套接字没有连接,事实上,当我从仪表板中删除用户时,我没有收到任何通知。

这是我在仪表板中用来将我的套接字连接到服务器并从用户模型收听更新的代码(可行):

//connect to the server and listen to updates from user model
      io.socket.get('/user', function(data, jwres) {
          $scope.users = data;
          $scope.$apply(); //write users in the table...
      });
      //wait for updates...
io.socket.on('user', function serverResponded (data) {
          if(data.verb == "updated")
          {
              //get the user index in the array and update it
              var index = getIndex(data.id, $scope.users);
              $scope.users[index].online = data.data.online;
              $scope.$apply();
          }
          if(data.verb == "destroyed")
          {
              //get the user index in the array and remove it
              var index = getIndex(data.id, $scope.users);
              $scope.users.splice(index, 1);
              $scope.$apply();
          }
          if(data.verb == "created")
          {
              //simply update the array
              $scope.users.push(data.data);
              $scope.$apply();
          }
      });

现在,我认为我在Android应用程序中遗漏的是GET请求,它会自动订阅我的套接字到模型并在发生某些事情时得到通知......但我不知道该怎么做。

我希望我很清楚......感谢所有愿意回答我的人!

PS:我不想使用AndroidAsync,因为我需要socket.io的最终版本!

1 个答案:

答案 0 :(得分:0)

如果有人需要它,我找到了解决方案:https://github.com/balderdashy/sails/issues/2640在这里你可以找到解决问题的方法! :)