I write to you today because i've been loosing all my hairs for days on one simple little error , i dont find the issue and i dont have anymre hair to take off So ... you are my last hope
The situation is simple : I try to make functionate a webGL built of my project. When i try to connect to my zone , the smartfox in local stay blocked on trying to "connect" with the server. The log on the server show no activity recorded, i mean no demand of connexion from me. When i debug , the property "is connected" of my smarfox object is false and the property "is connecting" stay on true infinitly (i put a console debug line in the update method) . Well i tryed with the Connector example and with the Tris example , both compiled in webGL build, and it works perfectly... The code i use in my project to connect is exactly the same. When i run my project in the Unity editor in webGL mode, it works perfectly, so i think the configuration of the server is fine with websocket and also my zone... it is just when i compile and use it in the browser that the connexion attempt stay blocked . It seems that the websocket is blocked internally and not sent out to the server ... Do you have an idea ?
Please ... help .. hank you sooo much
Here is the code of my login script :
Code: Select all
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System;
using System.Collections;
using System.Collections.Generic;
using Sfs2X.Core;
using Sfs2X.Util;
using Sfs2X.Entities.Data;
using Sfs2X.Requests;
using System.IO;
using Sfs2X;
public class SFS_Login : MonoBehaviour
{
public bool debug = true;
public Canvas canvas_UI_Log_Reg;
public Text title;
public InputField ipField;
public InputField portField;
public Text connectInfoText;
public GameObject connect_Button;
public InputField usernameField;
public InputField passwordField;
public GameObject login_Button;
public Text messageText;
private Sfs2X.SmartFox sfs;
private bool connectionAttempt = false;
//private string serverIP = "127.0.0.1";
//private string serverIP = "192.168.1.5";
//private string serverIP = "192.168.1.52";
//private string serverIP = "192.168.1.196";
//private string serverIP = "192.168.1.208";
public string zone = "Prepa_Monoscene_II";
// private string serverIP = "178.33.71.99"; //--> serveur distant
public static string serverIP = "37.187.136.36";
private string serverPort = "9933";
public static int serverPort_UDP = 9933; // -> port sfs2x udp
public string serverPort_WebGL = "8080"; // -> port sfs2x webgl
private string username = "";
private string password = "";
private bool isConnected = false;
private bool isNotFilled = false;
private string loginErrorMessage = "";
private string err = "";
private bool logOK = false;
private int sfs_Id;
private string nam = "";
private string av_Typ = "";
private string levelCod = "";
private string[] roomStrings;
private bool roomListReceived = false;
private GameObject[] connectElements;
private GameObject[] loginElements;
private bool isConnectElements = false;
private bool isLoginElements = false;
private SFS_Supervisor scrp_sfsSupervisor;
private string loggin_register = "false";
private bool webgl_on = false;
// Use this for initialization
void Awake()
{
// on etablit la connection au serveur
if (!SFS2X_Connection.IsInitialized)
{
create_sfs2x();
}
else
{
sfs = SFS2X_Connection.Connection;
}
scrp_sfsSupervisor = canvas_UI_Log_Reg.GetComponentInChildren<SFS_Supervisor>();
isConnectElements = true;
isLoginElements = true;
connectElements = GameObject.FindGameObjectsWithTag("Connect");
loginElements = GameObject.FindGameObjectsWithTag("Login");
isLoginElements = false;
isConnected = false;
isNotFilled = false;
RegisterSFSSceneCallbacks();
StaticSwitches.Zone = zone;
}
private void create_sfs2x()
{
// Initialize SFS2X
#if !UNITY_WEBGL
sfs = new Sfs2X.SmartFox();
#else
sfs = new SmartFox(UseWebSocket.WS_BIN);
webgl_on = true;
#endif
// Set ThreadSafeMode explicitly, or Windows Store builds will get a wrong default value (false)
sfs.ThreadSafeMode = true;
}
private void RegisterSFSSceneCallbacks()
{
sfs.AddEventListener(SFSEvent.CONNECTION, OnConnection);
sfs.AddEventListener(SFSEvent.CONNECTION_LOST, OnConnectionLost);
sfs.AddEventListener(SFSEvent.LOGIN, OnLogin);
sfs.AddEventListener(SFSEvent.LOGIN_ERROR, OnLoginError);
sfs.AddEventListener(SFSEvent.UDP_INIT, onUdpInit);
}
private void UnregisterSFSSceneCallbacks()
{
sfs.RemoveEventListener(SFSEvent.CONNECTION, OnConnection);
sfs.RemoveEventListener(SFSEvent.CONNECTION_LOST, OnConnectionLost);
sfs.RemoveEventListener(SFSEvent.LOGIN, OnLogin);
sfs.RemoveEventListener(SFSEvent.LOGIN_ERROR, OnLoginError);
sfs.RemoveEventListener(SFSEvent.UDP_INIT, onUdpInit);
}
public void Start()
{
ipField.text = serverIP;
portField.text = serverPort;
#if !UNITY_WEBGL
portField.text = serverPort;
#else
portField.text = serverPort_WebGL;
#endif
}
void Update()
{
if (sfs != null)
{
sfs.ProcessEvents();
// Debug.Log("sfs connected : " + sfs.IsConnected);
// Debug.Log("sfs is connecting : " + sfs.IsConnecting);
if (sfs.IsConnected)
{
connectInfoText.text = " Server Connection \nsucceeded !\nLog in Now, or \nCreate a New Player !";
isConnected = true;
isConnectElements = false;
isLoginElements = true;
}
else
{
//Debug.Log("SmartFox is not Connected");
isConnected = false;
isNotFilled = false;
logOK = false;
isConnectElements = true;
isLoginElements = false;
connectionAttempt = false;
connectInfoText.text = "Click on \"Connect\"";
}
}
if (!isConnected)
{
messageText.text = "Connexion failed !";
}
if (isNotFilled)
{
messageText.text = "Login Error :\nPlease, fill the \nUsername and \nPassword fields, or \nCreate a New Player !";
}
else if (logOK)
{
messageText.text = "Your Login is correct ! \nYou are directed to \nthe Base! \n....... Please wait!";
}
else
{
messageText.text = err;
}
if (isConnectElements)
{
title.text = "Connect";
connect_Button.SetActive(true);
foreach (GameObject log in loginElements)
{
log.SetActive(false);
}
foreach (GameObject con in connectElements)
{
con.SetActive(true);
}
}
else if (isLoginElements)
{
title.text = "Login";
connect_Button.SetActive(false);
foreach (GameObject log in loginElements)
{
log.SetActive(true);
}
foreach (GameObject con in connectElements)
{
con.SetActive(false);
}
}
//print("messageText.text = " + messageText.text + "connectInfoText.text = " + connectInfoText.text);
}
private void SFS2X_Connect()
{
// Set connection parameters
ConfigData sfs2x_config = new ConfigData();
sfs2x_config.Host = ipField.text;
sfs2x_config.Port = Convert.ToInt32(portField.text);
sfs2x_config.Zone = zone;
Debug.Log("Host : '" + sfs2x_config.Host+"'");
Debug.Log("Port : '" + sfs2x_config.Port+"'");
Debug.Log("Zone : '" + sfs2x_config.Zone+"'");
Debug.Log("sfssafethreadmode : '" + sfs.ThreadSafeMode + "'");
// Connect to SFS2X
sfs.Connect(sfs2x_config);
sfs.ProcessEvents();
}
public void OnConnection(BaseEvent evt)
{
if ((bool)evt.Params["success"])
{
// Save reference to the SmartFox instance in a static field, to share it among different scenes
SFS2X_Connection.Connection = sfs;
isConnectElements = false;
isLoginElements = true;
}
else
{
loginErrorMessage = (string)(evt.Params["error"]);
isConnectElements = true;
isLoginElements = false;
}
}
public void ConnectMenu()
{
Debug.Log("connect button clicked!");
if (!connectionAttempt)
{
connectionAttempt = true;
SFS2X_Connect();
}
}
public void LoginMenu()
{
Debug.Log("Login button clicked!");
username = usernameField.text;
password = passwordField.text;
Debug.Log("username = " + username + ", et password = " + password);
if (sfs.IsConnected)
{
isConnected = true;
//isNotConnected = false;
if ((!string.IsNullOrEmpty(username)) || (!string.IsNullOrEmpty(password)))
{
isNotFilled = false;
Debug.Log("je me logue");
sfs.Send(new Sfs2X.Requests.LoginRequest(username, password));
}
else
{
isNotFilled = true;
Debug.Log("les champs sont vides");
}
}
else
{
isConnected = false;
Debug.Log("ne suis plus connecté");
}
}
IEnumerator GiveSomeDelay(float waitTime)
{
yield return new WaitForSeconds(waitTime);
}
public void CreateInstantMenu()
{
Debug.Log("create Instant button clicked!");
loggin_register = "CreateInstantMenu";
sfs.Send(new Sfs2X.Requests.LoginRequest(GetRandomString(), "temporary_user"));
}
public void CreateAdvancedMenu()
{
Debug.Log("create Advanced button clicked!");
loggin_register = "CreateAdvancedMenu";
sfs.Send(new Sfs2X.Requests.LoginRequest(GetRandomString(), "temporary_user"));
}
public string GetRandomString()
{
string path = Path.GetRandomFileName();
path = path.Replace(".", ""); // Remove period.
return path;
}
public void Back()
{
Debug.Log("back Button Clicked!");
scrp_sfsSupervisor.currentState = SFS_Supervisor.MenuStates.Login;
}
public void Exit()
{
Debug.Log("Exit Button Clicked!");
Application.Quit();
}
public void OnLogin(BaseEvent evt)
{
if (loggin_register.Equals("false")) // si on ne s est pas logge en tant que temporaire pour creer un personnage
{
// on recupere les donnes utilisateur
ISFSObject dataObject = (SFSObject)evt.Params["data"];
string db_avG = dataObject.GetUtfString("GENDER");
string av_typ = dataObject.GetUtfString("AV_TYP");
string levCode = dataObject.GetUtfString("LEVELCODE");
StaticSwitches.avatarType = av_typ; // inscrit le type de l'avatar dans une donnée static pour accès multiples
StaticSwitches.avatarGenre = db_avG; // inscrit le genre de l'avatar dans une donnée static pour accès multiples
StaticSwitches.levelCode = levCode; // inscrit le level code dans une donnée static pour accès multiples
// si on n ets pas en webgl (c ets a dire pc ou android) on active l udp pour les transformees
if (!webgl_on)
{
sfs.InitUDP(serverIP, serverPort_UDP); // on active le protocole udp pour les transfomees -> sur un port different que le port tcp
// sfs.InitUDP(); // on active le protocole udp pour les transfomees -> sur le meme port que le port tcp
}
else
{
logOK = true;
sfs.Send(new JoinRoomRequest("Cosmic")); // on rejoint la room Cosmic
// On rejoint la scene de jeu
SceneManager.LoadScene("LoftAfrica");
// Remove SFS2X listeners before moving to the main game scene
UnregisterSFSSceneCallbacks();
}
}
else
{
if (loggin_register.Equals("CreateInstantMenu"))
{
sfs.Send(new JoinRoomRequest("Earth")); // on rejoint la room Earth
scrp_sfsSupervisor.currentState = SFS_Supervisor.MenuStates.InstantCreate;
}
else if (loggin_register.Equals("CreateAdvancedMenu"))
{
sfs.Send(new JoinRoomRequest("Earth")); // on rejoint la room Earth
scrp_sfsSupervisor.currentState = SFS_Supervisor.MenuStates.AdvancedCreate;
}
loggin_register = "false";
}
}
public void OnLoginError(BaseEvent evt)
{
// Show error message
err = "Login failed: " + (string)evt.Params["errorMessage"];
if (err.Contains("nobody"))
{
err = "There is nobody \nwith this username \nand/or password, \nPlease retry or\nCreate a New Player !";
}
}
private void onUdpInit(BaseEvent evt)
{
if ((bool)evt.Params["success"])
{
logOK = true;
Debug.Log("UDP operationnel");
sfs.Send(new JoinRoomRequest("Cosmic")); // on rejoint la room Cosmic
// On rejoint la scene de jeu
SceneManager.LoadScene("LoftAfrica");
// Remove SFS2X listeners before moving to the main game scene
UnregisterSFSSceneCallbacks();
}
else
{
Debug.Log("Probleme connection UDP");
sfs.InitUDP(serverIP, serverPort_UDP); // on active le protocole udp pour les transfomees -> sur un port different que le port tcp
// sfs.InitUDP(); // on active le protocole udp pour les transfomees -> sur le meme port que le port tcp
}
}
void OnConnectionLost(BaseEvent evt)
{
loginErrorMessage = "Connection lost / no connection to server";
}
void OnApplicationQuit()
{
UnregisterSFSSceneCallbacks();
}
}