Random disconnects with appwarp

+1 vote
Hi,

Occasionally/Randomly the appwarp connection is lost even if you are connected to a good wifi signal. According to the documentation, you can use the "resiliency" to automatically reconnect, etc, but during that time you lose the data other players are sending... Is there any way to fix this scene with the appwarp API ? data packets are reliable and must be received always.

i would appreciate any posible solution :)

PD: i am using appwarp basic version(not s2)

Thank you!
asked Sep 28, 2014 in AppWarp by etorkigames (25 points)

1 Answer

0 votes

 

Hi,
 
1. Can you please tell me which SDK and version you are using?.
2. if your connection breaks occasionally,Please tell me the exact scenario 
3. If you are developing turn based game and using SendMove to send the data then you can using getMoveHistory api to get the previous moves data
4. In simple games the recommended way is when a user get disconnected  and connection resiliency feature is enabled,other users will get the onUserPaused event,so pause other users too for that time so they can not send anything
answered Sep 29, 2014 by errahulpanchal (169 points)
Hi, thank you.

I had 1.9.1 app42(now i have 1.9.3) and I had 1 month ago appwarp dlls, now i have taken the last one. Maybe a reason of those breaks?

No, its a realtime game.

I am going to try using onUserPaused, but how accurate the warning message is to the other players?

Our game is a board game, where a user is sending his moves in realtime, and all them must arrive to his opponents. What do you recommend for that scenario?

Sometimes the breaks come when you go from the menu to another scene (game scene, connecting to a room) and you leave the room and go back to the menu again.  

WarpClient.GetInstance() returns null always(at any moment after loading another scene). Is this correct? In spite of that , the connection is ok... the unique problem is the occasional breaks.

It is often used In "resilency" showing a loading screen while is recovering? Or should be done in silence?

Thank you for the support.
Hi

You can try onUserPaused, When the users received this event paused their screen too and show a message until they receive onUserResumed event.

You should show a loading screen while recovering the connection otherwise user may get exit from the game.

Regarding scene issues i will let you know after discussing with teammates
Hi,

Doing it that way, Should not lose any data?
We are testing as you say, but it seems that when data is sent while the other is reconnecting, are lost. And we need none lost.

As I mentioned, there are random disconnects both PC and mobile, and do not depend on the signal quality. It's normal, or are we doing something wrong?

Thank you.
Hi,

When you are moving from one scene to another,Please also transfer the listeners from old scene to new scene.

About the connection break,please check update method is being called properly or not.
Hi,

We were doing this in all scenes(as example scene 1):

void Update(){
      if(WarpClient.GetInstance() != null) WarpClient.GetInstance().Update();
}

Is that ok?

In your "2 scenes example" only is checked null in the first scene, and not in the second one, where is directly called to Update. We are testing by this way now.
Is there a reason to do by this way in your example project?

Thank you.
Hi,

We didn't check in second scene becuase we assumed that instance is already initialized in first scene.But it is recommened way to check it in every scene.

Is your connection breaking when you are doing some actions on the screen or anything that can suspend the calling of update method.

Please check that update method is being called propery in every scene.

You can also send us the update method code.
Hi,

Ok, so we were doing right then.

Here is our code:

void Start () {

        listen = GetComponent<scene1_listener>();
        WarpClient.GetInstance().AddConnectionRequestListener(listen);
        WarpClient.GetInstance().AddChatRequestListener(listen);
        WarpClient.GetInstance().AddLobbyRequestListener(listen);
        WarpClient.GetInstance().AddNotificationListener(listen);
        WarpClient.GetInstance().AddRoomRequestListener(listen);
        WarpClient.GetInstance().AddUpdateRequestListener(listen);
        WarpClient.GetInstance().AddZoneRequestListener(listen);
    }

    void Update () {

        if(WarpClient.GetInstance() != null)WarpClient.GetInstance().Update();

    }

    void OnDestroy(){
        WarpClient.GetInstance().RemoveConnectionRequestListener(listen);
        WarpClient.GetInstance().RemoveChatRequestListener(listen);
        WarpClient.GetInstance().RemoveLobbyRequestListener(listen);
        WarpClient.GetInstance().RemoveNotificationListener(listen);
        WarpClient.GetInstance().RemoveRoomRequestListener(listen);
        WarpClient.GetInstance().RemoveUpdateRequestListener(listen);
        WarpClient.GetInstance().RemoveZoneRequestListener(listen);

    }

In your example project, you have different listeners scripts, is that important? We have the same script listener, attached to a gameObject in each scene. Is correct too?

EDIT
In the first scene, after the connection, this works:

if(WarpClient.GetInstance() != null)WarpClient.GetInstance().Update();

but after changing scene, it doesn't, and we have to use:

WarpClient.GetInstance().Update();

Because it returns null all the time. Is there any reason?

In your example project occurs the same scene...

END EDIT

Thank you for the support.
Download Widgets
Welcome to ShepHertz Product line forum, where you can ask questions and receive answers from the community. You can also reach out to us on support@shephertz.com
...