David 10 年 前
コミット
095ea8d673

+ 8 - 2
app/src/main/java/com/example/david/myapplication/MainActivity.java

@@ -18,6 +18,9 @@ public class MainActivity extends FragmentActivity {
     private static final int NUM_PAGES = 2;
     private ViewPager mPager;
     private PagerAdapter mPagerAdapter;
+    private videoFragment vf = new videoFragment();
+    private chatFragment cf = new chatFragment();
+    //define callback interface
 
 
     @Override
@@ -34,6 +37,9 @@ public class MainActivity extends FragmentActivity {
         mPagerAdapter = new fragmentPagerAdapter(getSupportFragmentManager());
         mPager.setAdapter(mPagerAdapter);
         mPager.setPageTransformer(true, new ZoomOutPageTransformer());
+        WebSocketHandler.addDiapoListener(vf);
+        WebSocketHandler.addChatListener(cf);
+        WebSocketHandler.init();
     }
 
 
@@ -46,9 +52,9 @@ public class MainActivity extends FragmentActivity {
         public Fragment getItem(int position) {
             switch (position) {
                 case 0:
-                    return new videoFragment();
+                    return vf;
                 default:
-                    return new chatFragment();
+                    return cf;
             }
         }
 

+ 115 - 0
app/src/main/java/com/example/david/myapplication/WebSocketHandler.java

@@ -0,0 +1,115 @@
+package com.example.david.myapplication;
+
+import android.text.Layout;
+import android.util.Log;
+import android.widget.EditText;
+
+import com.neovisionaries.ws.client.WebSocket;
+import com.neovisionaries.ws.client.WebSocketAdapter;
+import com.neovisionaries.ws.client.WebSocketException;
+import com.neovisionaries.ws.client.WebSocketFactory;
+import com.neovisionaries.ws.client.WebSocketFrame;
+
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.net.ssl.SSLContext;
+
+/**
+ * Created by david on 16/04/16.
+ */
+interface chatListener {
+    void msgReceived(String result);
+}
+interface diapoListener {
+    void msgReceived(String PDF, String diapo, int slide);
+}
+
+public class WebSocketHandler {
+    private static List<chatListener> chat_listeners = new ArrayList<chatListener>();
+    private static List<diapoListener> diapo_listeners = new ArrayList<diapoListener>();
+
+    public static void addChatListener(chatListener toAdd) {
+        chat_listeners.add(toAdd);
+    }
+    public static void addDiapoListener(diapoListener toAdd) {
+        diapo_listeners.add(toAdd);
+    }
+
+    private static WebSocket ws;
+    private enum WS_STATUS {
+        CONNECTED,
+        DISCONNECTED
+    };
+    private static WS_STATUS status = WS_STATUS.DISCONNECTED;
+    private static final String WSS_URL = "wss://ws.especificosba.com.ar/";
+
+    public static void init(){
+        connectWebSocket();
+    }
+    private static void connectWebSocket() {
+        try {
+            WebSocketFactory factory = new WebSocketFactory();
+            SSLContext context = NaiveSSLContext.getInstance("TLS");
+
+            // Set the custom SSL context.
+            factory.setSSLContext(context);
+            ws = factory.createSocket(WSS_URL);
+        } catch (Exception e) {
+            return;
+        }
+
+        ws.addListener(new WebSocketAdapter() {
+            @Override
+            public void onTextMessage(WebSocket websocket, String message) throws Exception {
+                Log.i("Websocket", "msg:" + message);
+                JSONObject obj = new JSONObject(message);
+                switch (obj.getString("type")) {
+                    case "chat":
+                        String formattedMessage = String.format("\n[HORA] %s: %s", obj.getString("user"), obj.getString("text"));
+                        for (chatListener cl : chat_listeners)
+                            cl.msgReceived(formattedMessage);
+
+
+                        break;
+                    default:
+                        break;
+                }
+                ;
+            }
+
+            @Override
+            public void onConnected(WebSocket websocket, Map<String, List<String>> headers) throws Exception {
+                Log.i("Websocket", "Connected");
+                status = WS_STATUS.CONNECTED;
+                //FIXME chat.append("\nConectado al sistema");
+            }
+
+            @Override
+            public void onDisconnected(WebSocket websocket, WebSocketFrame serverCloseFrame, WebSocketFrame clientCloseFrame,
+                                       boolean closedByServer) {
+                Log.i("Websocket", "Disconnected");
+                status = WS_STATUS.DISCONNECTED;
+                websocket.connectAsynchronously();
+            }
+
+            @Override
+            public void onConnectError(WebSocket websocket, WebSocketException cause) {
+                Log.i("Websocket", "Didn't connect" + cause.getMessage());
+                status = WS_STATUS.DISCONNECTED;
+            }
+        }).connectAsynchronously();
+    }
+
+    public static void sendMessage(String s) {
+        String formatted=String.format("{ \"type\":\"chat\", \"user\": \"%s %s (%s)\", \"text\":\"%s\" }", "nombre","Apellido","pais", s);
+        Log.i("Websocket", "sending" + formatted);
+
+        ws.sendText(formatted);
+
+    }
+
+}

+ 20 - 80
app/src/main/java/com/example/david/myapplication/chatFragment.java

@@ -29,111 +29,51 @@ import javax.net.ssl.SSLContext;
 /**
  * Created by david on 16/04/16.
  */
-public class chatFragment extends Fragment {
-    private static final String WSS_URL = "wss://ws.especificosba.com.ar/";
+public class chatFragment extends Fragment implements chatListener {
     private TextView chat;
-    private WebSocket ws;
-    private enum WS_STATUS {
-        CONNECTED,
-        DISCONNECTED
-    };
-    private WS_STATUS status = WS_STATUS.DISCONNECTED;
+
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
         ViewGroup rootView = (ViewGroup) inflater.inflate(
                 R.layout.fragment_chat , container, false);
-
-
         return rootView;
     }
 
     @Override
     public void onActivityCreated(@Nullable Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
-        connectWebSocket();
         Button b = (Button) getView().findViewById(R.id.button);
-        chat =(TextView) getView().findViewById(R.id.chat);
         b.setOnClickListener(new Button.OnClickListener(){
             @Override
             public void onClick(View b){
                 sendMessage();
             }
         });
-        chat.setMovementMethod(new ScrollingMovementMethod());
-    }
-
-    private void connectWebSocket() {
-        try {
-            WebSocketFactory factory = new WebSocketFactory();
-            SSLContext context = NaiveSSLContext.getInstance("TLS");
-
-            // Set the custom SSL context.
-            factory.setSSLContext(context);
-            ws = factory.createSocket(WSS_URL);
-        } catch (Exception e) {
-            return;
-        }
-
-        ws.addListener(new WebSocketAdapter() {
-            @Override
-            public void onTextMessage(WebSocket websocket, String message) throws Exception {
-                Log.i("Websocket", "msg:" + message);
-                JSONObject obj = new JSONObject(message);
-                switch (obj.getString("type")) {
-                    case "chat":
-
-                        String formattedMessage = String.format("\n[HORA] %s: %s", obj.getString("user"), obj.getString("text"));
-                        chat.append(formattedMessage);
-                        final Layout layout = chat.getLayout();
-                        if(layout != null){
-                            int scrollDelta = layout.getLineBottom(chat.getLineCount() - 1)
-                                    - chat.getScrollY() - chat.getHeight();
-                            Log.i("Websocket", Integer.toString(scrollDelta));
-                            if(scrollDelta > 0)
-                                chat.scrollBy(0, scrollDelta);
-                        }
-                        chat.invalidate();
-                        break;
-                    default:
-                        break;
-                }
-                ;
-            }
-
-            @Override
-            public void onConnected(WebSocket websocket, Map<String, List<String>> headers) throws Exception {
-                Log.i("Websocket", "Connected");
-                status = WS_STATUS.CONNECTED;
-                chat.append("\nConectado al sistema");
-            }
-
-            @Override
-            public void onDisconnected(WebSocket websocket, WebSocketFrame serverCloseFrame, WebSocketFrame clientCloseFrame,
-                                       boolean closedByServer) {
-                Log.i("Websocket", "Disconnected");
-                status = WS_STATUS.DISCONNECTED;
-                websocket.connectAsynchronously();
-            }
-
-            @Override
-            public void onConnectError(WebSocket websocket, WebSocketException cause) {
-                Log.i("Websocket", "Didn't connect" + cause.getMessage());
-                status = WS_STATUS.DISCONNECTED;
-            }
-        }).connectAsynchronously();
+        chat =(TextView) getView().findViewById(R.id.chat);
+        //chat.setMovementMethod(new ScrollingMovementMethod());
     }
 
-    public void sendMessage() {
+    public void sendMessage(){
         EditText editText = (EditText) getView().findViewById( R.id.send_text );
         String text=editText.getText().toString();
         if(text.length() < 3) return;
-
-        String formatted=String.format("{ \"type\":\"chat\", \"user\": \"%s %s (%s)\", \"text\":\"%s\" }", "nombre","Apellido","pais", text);
-        Log.i("Websocket", "sending" + formatted);
-
-        ws.sendText(formatted);
+        WebSocketHandler.sendMessage(text);
         editText.setText("");
     }
 
+    @Override
+    public void msgReceived(String text) {
+        Log.i("Websocket", "msg received: " + text);
+        //chat.append(result);
+        chat.setText(chat.getText() + "\ntext");
+        /*final Layout layout = chat.getLayout();
+        if(layout != null){
+            int scrollDelta = layout.getLineBottom(chat.getLineCount() - 1)
+                    - chat.getScrollY() - chat.getHeight();
+            if(scrollDelta > 0)
+                chat.scrollBy(0, scrollDelta);
+        }*/
+        chat.invalidate();
+    }
 }

+ 6 - 2
app/src/main/java/com/example/david/myapplication/videoFragment.java

@@ -10,13 +10,14 @@ import android.widget.ImageView;
 import com.squareup.picasso.Picasso;
 
 import io.vov.vitamio.MediaPlayer;
+import io.vov.vitamio.utils.Log;
 import io.vov.vitamio.widget.VideoView;
 
 
 /**
  * Created by david on 16/04/16.
  */
-public class videoFragment extends Fragment {
+public class videoFragment extends Fragment  implements diapoListener  {
     private static final String path = "rtmp://plataforma.especificosba.com.ar:1935/src/movie";
     private static final String default_image = "https://plataforma.especificosba.com.ar/diapo/EBA/1.png";
     private VideoView mVideoView;
@@ -45,5 +46,8 @@ public class videoFragment extends Fragment {
         mVideoView.setVideoPath(path);
         mVideoView.start();
     }
-
+    @Override
+    public void msgReceived(String PDF, String diapo, int slide){
+        Log.i("WebsocketPDF" + PDF + diapo + Integer.toString(slide));
+    }
 }

+ 2 - 2
app/src/main/res/layout/fragment_chat.xml

@@ -7,7 +7,7 @@
     <TextView
         android:layout_width="match_parent"
         android:layout_height="0dp"
-        android:layout_weight="4"
+        android:layout_weight="6"
         android:scrollbars = "vertical"
         android:id="@+id/chat" />
     <LinearLayout
@@ -20,7 +20,7 @@
             android:layout_height="match_parent"
             android:layout_weight="4"
             android:layout_width="0dp"
-            android:id="@+id/send_text" />
+            android:id="@+id/send_text"/>
         <Button
             style="?android:attr/buttonStyleSmall"
             android:layout_width="0dp"