28 |
28 |
import java.security.MessageDigest;
|
29 |
29 |
import java.security.NoSuchAlgorithmException;
|
30 |
30 |
|
31 |
|
import android.app.Activity;
|
32 |
31 |
import android.content.pm.PackageInfo;
|
33 |
32 |
import android.content.pm.PackageManager;
|
34 |
33 |
|
35 |
|
import androidx.appcompat.app.AppCompatActivity;
|
36 |
34 |
import androidx.fragment.app.FragmentActivity;
|
37 |
35 |
|
38 |
36 |
import org.distorted.library.main.DistortedLibrary;
|
... | ... | |
43 |
41 |
|
44 |
42 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
45 |
43 |
|
46 |
|
public class RubikNetwork implements Runnable
|
|
44 |
public class RubikNetwork
|
47 |
45 |
{
|
48 |
46 |
public interface Receiver
|
49 |
47 |
{
|
... | ... | |
54 |
52 |
|
55 |
53 |
public interface Updatee
|
56 |
54 |
{
|
|
55 |
void iconDownloaded();
|
57 |
56 |
void receiveUpdate(RubikUpdates update);
|
58 |
57 |
void errorUpdate();
|
59 |
58 |
}
|
60 |
59 |
|
61 |
60 |
public static final int MAX_PLACES = 10;
|
62 |
61 |
|
63 |
|
private static final int DOWNLOAD = 0;
|
64 |
|
private static final int SUBMIT = 1;
|
65 |
|
private static final int DEBUG = 2;
|
66 |
|
private static final int SUSPICIOUS = 3;
|
67 |
|
private static final int IDLE = 4;
|
68 |
|
|
69 |
62 |
private static final int REND_ADRENO= 0;
|
70 |
63 |
private static final int REND_MALI = 1;
|
71 |
64 |
private static final int REND_POWER = 2;
|
72 |
65 |
private static final int REND_OTHER = 3;
|
73 |
66 |
|
74 |
|
private static final int DEBUG_NOT_YET = 0;
|
75 |
67 |
private static final int DEBUG_RUNNING = 1;
|
76 |
68 |
private static final int DEBUG_SUCCESS = 2;
|
77 |
69 |
private static final int DEBUG_FAILURE = 3;
|
... | ... | |
119 |
111 |
private static RubikNetwork mThis;
|
120 |
112 |
private static String mScores = "";
|
121 |
113 |
private static boolean mRunning = false;
|
122 |
|
private static int mMode = IDLE;
|
123 |
114 |
private static Receiver mReceiver;
|
124 |
115 |
private static Updatee mUpdatee;
|
125 |
116 |
private static String mVersion;
|
... | ... | |
380 |
371 |
return sbuf.toString();
|
381 |
372 |
}
|
382 |
373 |
|
383 |
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
384 |
|
|
385 |
|
private void sendDebug()
|
386 |
|
{
|
387 |
|
String url = constructDebugURL();
|
388 |
|
/*
|
389 |
|
try { Thread.sleep(5000); }
|
390 |
|
catch( InterruptedException ignored) {}
|
391 |
|
*/
|
392 |
|
try
|
393 |
|
{
|
394 |
|
java.net.URL connectURL = new URL(url);
|
395 |
|
HttpURLConnection conn = (HttpURLConnection)connectURL.openConnection();
|
396 |
|
|
397 |
|
conn.setDoInput(true);
|
398 |
|
conn.setDoOutput(true);
|
399 |
|
conn.setUseCaches(false);
|
400 |
|
conn.setRequestMethod("GET");
|
401 |
|
conn.connect();
|
402 |
|
conn.getOutputStream().flush();
|
403 |
|
|
404 |
|
InputStream is = conn.getInputStream();
|
405 |
|
BufferedReader r = new BufferedReader(new InputStreamReader(is));
|
406 |
|
StringBuilder answer = new StringBuilder();
|
407 |
|
|
408 |
|
for (String line; (line = r.readLine()) != null; )
|
409 |
|
{
|
410 |
|
answer.append(line).append('\n');
|
411 |
|
}
|
412 |
|
|
413 |
|
String updates = answer.toString();
|
414 |
|
mUpdates.parse(updates);
|
415 |
|
if( mUpdatee!=null ) mUpdatee.receiveUpdate(mUpdates);
|
416 |
|
mDebugState = DEBUG_SUCCESS;
|
417 |
|
}
|
418 |
|
catch( final Exception e )
|
419 |
|
{
|
420 |
|
if( mUpdatee!=null ) mUpdatee.errorUpdate();
|
421 |
|
mDebugState = DEBUG_FAILURE;
|
422 |
|
}
|
423 |
|
}
|
424 |
|
|
425 |
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
426 |
|
|
427 |
|
private void sendSuspicious()
|
428 |
|
{
|
429 |
|
String url = constructSuspiciousURL();
|
430 |
|
|
431 |
|
try
|
432 |
|
{
|
433 |
|
java.net.URL connectURL = new URL(url);
|
434 |
|
HttpURLConnection conn = (HttpURLConnection)connectURL.openConnection();
|
435 |
|
|
436 |
|
conn.setDoInput(true);
|
437 |
|
conn.setDoOutput(true);
|
438 |
|
conn.setUseCaches(false);
|
439 |
|
conn.setRequestMethod("GET");
|
440 |
|
conn.connect();
|
441 |
|
conn.getOutputStream().flush();
|
442 |
|
conn.getInputStream();
|
443 |
|
}
|
444 |
|
catch( final Exception e )
|
445 |
|
{
|
446 |
|
// ignore
|
447 |
|
}
|
448 |
|
}
|
449 |
|
|
450 |
374 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
451 |
375 |
|
452 |
376 |
private boolean network(String url)
|
... | ... | |
592 |
516 |
|
593 |
517 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
594 |
518 |
|
595 |
|
@Override
|
596 |
|
public void run()
|
|
519 |
private void figureOutVersion(FragmentActivity act)
|
597 |
520 |
{
|
598 |
|
boolean receiveValues=true;
|
|
521 |
try
|
|
522 |
{
|
|
523 |
PackageInfo pInfo = act.getPackageManager().getPackageInfo( act.getPackageName(), 0);
|
|
524 |
mVersion = pInfo.versionName;
|
|
525 |
}
|
|
526 |
catch (PackageManager.NameNotFoundException e)
|
|
527 |
{
|
|
528 |
mVersion = "0.9.2";
|
|
529 |
}
|
|
530 |
}
|
599 |
531 |
|
600 |
|
initializeStatics();
|
|
532 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
601 |
533 |
|
|
534 |
private void downloadThread()
|
|
535 |
{
|
602 |
536 |
try
|
603 |
537 |
{
|
604 |
|
if( mMode==DOWNLOAD && gottaDownload() )
|
605 |
|
{
|
606 |
|
mRunning = true;
|
607 |
|
receiveValues = network(constructDownloadURL());
|
608 |
|
}
|
609 |
|
if( mMode==SUBMIT )
|
|
538 |
if( gottaDownload() )
|
610 |
539 |
{
|
611 |
540 |
mRunning = true;
|
612 |
|
RubikScores scores = RubikScores.getInstance();
|
|
541 |
boolean receiveValues = network(constructDownloadURL());
|
613 |
542 |
|
614 |
|
if( scores.thereAreUnsubmittedRecords() )
|
|
543 |
if( mRunning )
|
615 |
544 |
{
|
616 |
|
receiveValues = network(constructSubmitURL());
|
|
545 |
receiveValues = fillValuesNormal();
|
|
546 |
mRunning = false;
|
617 |
547 |
}
|
618 |
|
}
|
619 |
|
if( mMode==DEBUG )
|
620 |
|
{
|
621 |
|
sendDebug();
|
622 |
|
receiveValues = false;
|
623 |
|
mRunning = false;
|
624 |
|
}
|
625 |
|
if( mMode==SUSPICIOUS )
|
626 |
|
{
|
627 |
|
sendSuspicious();
|
628 |
|
receiveValues = false;
|
629 |
|
mRunning = false;
|
|
548 |
|
|
549 |
if( receiveValues && mReceiver!=null ) mReceiver.receive(mCountry, mName, mTime);
|
630 |
550 |
}
|
631 |
551 |
}
|
632 |
552 |
catch( Exception e )
|
633 |
553 |
{
|
634 |
|
android.util.Log.e("D", "Exception in RUN");
|
635 |
|
|
636 |
554 |
if( mReceiver!=null ) mReceiver.message("Exception downloading records: "+e.getMessage() );
|
637 |
555 |
}
|
|
556 |
}
|
|
557 |
|
|
558 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
638 |
559 |
|
639 |
|
if( mRunning )
|
|
560 |
private void submitThread()
|
|
561 |
{
|
|
562 |
try
|
|
563 |
{
|
|
564 |
mRunning = true;
|
|
565 |
RubikScores scores = RubikScores.getInstance();
|
|
566 |
|
|
567 |
if( scores.thereAreUnsubmittedRecords() )
|
|
568 |
{
|
|
569 |
boolean receiveValues = network(constructSubmitURL());
|
|
570 |
|
|
571 |
if( mRunning )
|
|
572 |
{
|
|
573 |
receiveValues = fillValuesNormal();
|
|
574 |
mRunning = false;
|
|
575 |
}
|
|
576 |
|
|
577 |
if( receiveValues )
|
|
578 |
{
|
|
579 |
RubikScores.getInstance().successfulSubmit();
|
|
580 |
if( mReceiver!=null ) mReceiver.receive(mCountry, mName, mTime);
|
|
581 |
}
|
|
582 |
}
|
|
583 |
}
|
|
584 |
catch( Exception e )
|
640 |
585 |
{
|
641 |
|
receiveValues = fillValuesNormal();
|
642 |
|
mRunning = false;
|
|
586 |
if( mReceiver!=null ) mReceiver.message("Exception submitting records: "+e.getMessage() );
|
643 |
587 |
}
|
|
588 |
}
|
644 |
589 |
|
645 |
|
if( receiveValues )
|
|
590 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
591 |
|
|
592 |
private void debugThread()
|
|
593 |
{
|
|
594 |
String url = constructDebugURL();
|
|
595 |
/*
|
|
596 |
try { Thread.sleep(5000); }
|
|
597 |
catch( InterruptedException ignored) {}
|
|
598 |
*/
|
|
599 |
try
|
646 |
600 |
{
|
647 |
|
if( mReceiver!=null ) mReceiver.receive(mCountry, mName, mTime);
|
|
601 |
java.net.URL connectURL = new URL(url);
|
|
602 |
HttpURLConnection conn = (HttpURLConnection)connectURL.openConnection();
|
648 |
603 |
|
649 |
|
if( mMode==SUBMIT )
|
|
604 |
conn.setDoInput(true);
|
|
605 |
conn.setDoOutput(true);
|
|
606 |
conn.setUseCaches(false);
|
|
607 |
conn.setRequestMethod("GET");
|
|
608 |
conn.connect();
|
|
609 |
conn.getOutputStream().flush();
|
|
610 |
|
|
611 |
InputStream is = conn.getInputStream();
|
|
612 |
BufferedReader r = new BufferedReader(new InputStreamReader(is));
|
|
613 |
StringBuilder answer = new StringBuilder();
|
|
614 |
|
|
615 |
for (String line; (line = r.readLine()) != null; )
|
650 |
616 |
{
|
651 |
|
RubikScores.getInstance().successfulSubmit();
|
|
617 |
answer.append(line).append('\n');
|
652 |
618 |
}
|
|
619 |
|
|
620 |
String updates = answer.toString();
|
|
621 |
mUpdates.parse(updates);
|
|
622 |
|
|
623 |
if( mUpdatee!=null ) mUpdatee.receiveUpdate(mUpdates);
|
|
624 |
mDebugState = DEBUG_SUCCESS;
|
|
625 |
}
|
|
626 |
catch( final Exception e )
|
|
627 |
{
|
|
628 |
if( mUpdatee!=null ) mUpdatee.errorUpdate();
|
|
629 |
mDebugState = DEBUG_FAILURE;
|
|
630 |
}
|
|
631 |
}
|
|
632 |
|
|
633 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
634 |
|
|
635 |
private void suspiciousThread()
|
|
636 |
{
|
|
637 |
String url = constructSuspiciousURL();
|
|
638 |
|
|
639 |
try
|
|
640 |
{
|
|
641 |
java.net.URL connectURL = new URL(url);
|
|
642 |
HttpURLConnection conn = (HttpURLConnection)connectURL.openConnection();
|
|
643 |
|
|
644 |
conn.setDoInput(true);
|
|
645 |
conn.setDoOutput(true);
|
|
646 |
conn.setUseCaches(false);
|
|
647 |
conn.setRequestMethod("GET");
|
|
648 |
conn.connect();
|
|
649 |
conn.getOutputStream().flush();
|
|
650 |
conn.getInputStream();
|
|
651 |
}
|
|
652 |
catch( final Exception e )
|
|
653 |
{
|
|
654 |
// ignore
|
653 |
655 |
}
|
654 |
656 |
}
|
655 |
657 |
|
... | ... | |
683 |
685 |
|
684 |
686 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
685 |
687 |
|
686 |
|
private void start(Receiver receiver, Activity act, int mode)
|
|
688 |
public void download(Receiver receiver, FragmentActivity act)
|
687 |
689 |
{
|
|
690 |
initializeStatics();
|
688 |
691 |
mReceiver = receiver;
|
689 |
|
mMode = mode;
|
|
692 |
figureOutVersion(act);
|
690 |
693 |
|
691 |
|
try
|
|
694 |
Thread thread = new Thread()
|
692 |
695 |
{
|
693 |
|
PackageInfo pInfo = act.getPackageManager().getPackageInfo( act.getPackageName(), 0);
|
694 |
|
mVersion = pInfo.versionName;
|
695 |
|
}
|
696 |
|
catch (PackageManager.NameNotFoundException e)
|
697 |
|
{
|
698 |
|
mVersion = "0.9.2";
|
699 |
|
}
|
|
696 |
public void run()
|
|
697 |
{
|
|
698 |
downloadThread();
|
|
699 |
}
|
|
700 |
};
|
700 |
701 |
|
701 |
|
Thread networkThrd = new Thread(this);
|
702 |
|
networkThrd.start();
|
|
702 |
thread.start();
|
703 |
703 |
}
|
704 |
704 |
|
705 |
705 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
706 |
706 |
|
707 |
|
public void download(Receiver receiver, FragmentActivity act)
|
|
707 |
public void submit(Receiver receiver, FragmentActivity act)
|
708 |
708 |
{
|
709 |
|
start(receiver, act, DOWNLOAD);
|
710 |
|
}
|
|
709 |
initializeStatics();
|
|
710 |
mReceiver = receiver;
|
|
711 |
figureOutVersion(act);
|
711 |
712 |
|
712 |
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
713 |
Thread thread = new Thread()
|
|
714 |
{
|
|
715 |
public void run()
|
|
716 |
{
|
|
717 |
submitThread();
|
|
718 |
}
|
|
719 |
};
|
713 |
720 |
|
714 |
|
public void submit(Receiver receiver, FragmentActivity act)
|
715 |
|
{
|
716 |
|
start(receiver, act, SUBMIT);
|
|
721 |
thread.start();
|
717 |
722 |
}
|
718 |
723 |
|
719 |
724 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
720 |
725 |
|
721 |
|
public void debug(AppCompatActivity act)
|
|
726 |
public void debug()
|
722 |
727 |
{
|
|
728 |
initializeStatics();
|
723 |
729 |
mDebugState = DEBUG_RUNNING;
|
724 |
|
start(null, act, DEBUG);
|
|
730 |
|
|
731 |
Thread thread = new Thread()
|
|
732 |
{
|
|
733 |
public void run()
|
|
734 |
{
|
|
735 |
debugThread();
|
|
736 |
}
|
|
737 |
};
|
|
738 |
|
|
739 |
thread.start();
|
725 |
740 |
}
|
726 |
741 |
|
727 |
742 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
728 |
743 |
|
729 |
|
public void suspicious(AppCompatActivity act, String suspicious)
|
|
744 |
public void suspicious(String suspicious)
|
730 |
745 |
{
|
|
746 |
initializeStatics();
|
731 |
747 |
mSuspicious = suspicious;
|
732 |
|
start(null, act, SUSPICIOUS);
|
|
748 |
|
|
749 |
Thread thread = new Thread()
|
|
750 |
{
|
|
751 |
public void run()
|
|
752 |
{
|
|
753 |
suspiciousThread();
|
|
754 |
}
|
|
755 |
};
|
|
756 |
|
|
757 |
thread.start();
|
733 |
758 |
}
|
734 |
759 |
|
735 |
760 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
... | ... | |
749 |
774 |
else mUpdatee = updatee;
|
750 |
775 |
}
|
751 |
776 |
|
|
777 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
778 |
|
|
779 |
public void downloadIcons(Updatee updatee)
|
|
780 |
{
|
|
781 |
|
|
782 |
}
|
|
783 |
|
752 |
784 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
753 |
785 |
|
754 |
786 |
public void updateDone(String shortName)
|
Reorganize the Network so that concurrent network operattions are possible.
Finally figure out and fix the bug which was causing users to multi-submit the same records over and over.