Revision ffe7e55d
Added by Leszek Koltunski over 2 years ago
src/main/java/org/distorted/network/RubikNetwork.java | ||
---|---|---|
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) |
Also available in: Unified diff
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.