public void ClientRegister()
    {
        if (userNameInputField.text.Length < 8)
        {
            loginErrorString = "Invalid UserName. Must be at least 8 characters!";
            return;
        }
        if (serverIPInputField.text.Length < 11)
        {
            loginErrorString = "Invalid IP!";
            return;
        }

        ServerIP = serverIPInputField.text;

        ClientBuilder();

        deviceID = userNameInputField.text;
        Debug.Log("Logging in as: " + deviceID + " to IP: " + ServerIP);
        PlayerPrefs.SetString("UserName", deviceID);


        ManualResetEvent registerEvent = new ManualResetEvent(false);

        //Register and connect client
        Debug.Log("Trying to register");
        var request = NAuthenticateMessage.Device(deviceID);

        client.Register(request, (INSession session) =>
        {
            this.session           = session;
            ServerInstance.session = session;
            client.Connect(session);
            clientConnected = true;
            NakamaData.Singleton.Session = session;
            registerEvent.Set();
        }, (INError err) =>
        {
            if (err.Code == ErrorCode.AuthError)
            {
                loginErrorString = "This UserName is already registered!";
            }
            else
            {
                loginErrorString = "ID register " + deviceID + " failed: " + err;
            }

            registerEvent.Set();
        });

        registerEvent.WaitOne(1000, false);

        if (clientConnected)
        {
            FetchClientInfo();
            UpdateUserInfo();
            JoinDefaultRoom();
            CompleteLogin();
        }
    }
예제 #2
0
        public void LoginEmail_Valid()
        {
            ManualResetEvent evt    = new ManualResetEvent(false);
            INSession        result = null;

            string   piece    = random.GetString().Substring(8);
            string   email    = String.Format("{0}@{0}.com", piece);
            string   password = TestContext.CurrentContext.Random.GetString();
            INClient client   = NClient.Default(DefaultServerKey);
            var      message  = NAuthenticateMessage.Email(email, password);

            client.Register(message, (INSession _) =>
            {
                client.Login(message, (INSession session) =>
                {
                    result = session;
                    evt.Set();
                }, (INError error) =>
                {
                    evt.Set();
                });
            }, (INError error) =>
            {
                evt.Set();
            });

            evt.WaitOne(1000, false);
            Assert.NotNull(result);
            Assert.NotNull(result.Token);
        }
예제 #3
0
        public void LoginDevice_Valid()
        {
            ManualResetEvent evt    = new ManualResetEvent(false);
            INSession        result = null;

            string   id      = random.GetString();
            INClient client  = NClient.Default(DefaultServerKey);
            var      message = NAuthenticateMessage.Device(id);

            client.Register(message, (INSession _) =>
            {
                client.Login(message, (INSession session) =>
                {
                    result = session;
                    evt.Set();
                }, (INError error) =>
                {
                    evt.Set();
                });
            }, (INError error) =>
            {
                evt.Set();
            });

            evt.WaitOne(1000, false);
            Assert.NotNull(result);
            Assert.NotNull(result.Token);
        }
예제 #4
0
 // +++ nakama event handler +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 private void OnConnectedToNakamaServer(INSession currentSession)
 {
     if (currentSession != null)
     {
         nakamaSession = currentSession;
         _connected    = true;
     }
 }
    public void ClientLogin()
    {
        if (userNameInputField.text.Length < 10)
        {
            loginErrorString = "Invalid UserName. Must be at least 10 characters. UserName entered was only " + userNameInputField.text.Length + " characters";
            return;
        }
        if (serverIPInputField.text.Length < 11)
        {
            loginErrorString = "Invalid IP!";
            return;
        }

        ServerIP = serverIPInputField.text;

        ClientBuilder(); //Build the Nakama client object

        deviceID = userNameInputField.text;
        Debug.Log("Logging in as: " + deviceID + " to IP: " + ServerIP);
        PlayerPrefs.SetString("UserName", deviceID);

        //Allows us to wait until the register check is complete before moving onto login
        ManualResetEvent loginEvent = new ManualResetEvent(false);

        ////Try to Login
        var request = NAuthenticateMessage.Device(deviceID);

        client.Login(request, (INSession session) =>
        {
            if (ServerInstance.session == session)
            {
                loginErrorString = "This user is already logged in!";
                loginEvent.Set();
                return;
            }
            //outputText += "Player logged in successfully. ID: " + deviceID.ToString() + "\n";
            this.session           = session;
            ServerInstance.session = session;
            client.Connect(session);
            clientConnected = true;
            NakamaData.Singleton.Session = session;
            loginEvent.Set();
        }, (INError err) =>
        {
            loginErrorString = "Player failed to login! ID: " + deviceID.ToString() + " Error: " + err.ToString() + "\n";
            loginEvent.Set();
        });

        loginEvent.WaitOne(1000, false);

        if (clientConnected)
        {
            FetchClientInfo();
            UpdateUserInfo();
            JoinDefaultRoom();
            CompleteLogin();
        }
    }
예제 #6
0
        private string getWebsocketUri(INSession session)
        {
            // Init base WebSocket connection
            var scheme = (SSL) ? "wss" : "ws";
            var bUri   = new UriBuilder(scheme, Host, unchecked ((int)Port), "api");

            bUri.Query = String.Format("token={0}&lang={1}", session.Token, Lang);
            return(bUri.Uri.ToString());
        }
예제 #7
0
 public void OnSessionConnected(INSession session)
 {
     Debug.Log("On Session Connected");
     Enqueue(() =>
     {
         Debug.Log("Main thread");
         pageLogin.enabled       = false;
         pageMatchMaking.enabled = true;
     }
             );
 }
 private void SessionHandler(INSession session)
 {
     Debug.LogFormat("Session: '{0}'.", session.Token);
     _session = session;
     _client.Connect(_session, (bool done) => {
         Debug.Log("Session connected.");
         // We'll set a UI label from the socket.
         _uiLabelMessage = "Connected.";
         // Store session for quick reconnects.
         PlayerPrefs.SetString("nk.session", session.Token);
     });
 }
예제 #9
0
    public void Player2LoginClick()
    {
        var request = NAuthenticateMessage.Email(EMAIL, PASSWORD);

        client2.Login(request, (INSession session) => {
            Debug.Log("Player 2 Logged in successfully");
            this.session2 = session;
            RegisterButtonPlayer2Enable = false;
            LoginButtonPlayer2Enable    = false;
            ConnectPlayer2Enable        = true;
        }, (INError error) => {
            Debug.LogErrorFormat("Email login '{0}' failed: {1}", EMAIL, error);
        });
    }
예제 #10
0
    public void Player1LoginClick()
    {
        string id      = SystemInfo.deviceUniqueIdentifier;
        var    request = NAuthenticateMessage.Device(id);

        client1.Login(request, (INSession session) => {
            Debug.Log("Player 1 Logged in successfully");
            this.session1 = session;
            RegisterButtonPlayer1Enable = false;
            LoginButtonPlayer1Enable    = false;
            ConnectPlayer1Enable        = true;
        }, (INError error) => {
            Debug.LogErrorFormat("ID login '{0}' failed: {1}", id, error);
        });
    }
예제 #11
0
        private NakamaManager()
        {
            _client = new NClient.Builder(ServerKey).Host(HostIp).Port(Port).SSL(UseSsl).Build();
            _client.OnTopicMessage = message =>
            {
                var chatMessages = StateManager.Instance.ChatMessages;
                foreach (var topic in chatMessages.Keys)
                {
                    if (topic.Id.Equals(message.Topic.Id))
                    {
                        chatMessages[topic].Add(message.MessageId, message);
                    }
                }
            };

            _sessionHandler = session =>
            {
                Logger.LogFormat("Session: '{0}'.", session.Token);
                _client.Connect(session, done =>
                {
                    Session         = session;
                    _reconnectCount = 0;
                    // cache session for quick reconnects
                    _dispatchQueue.Enqueue(() =>
                    {
                        PlayerPrefs.SetString("nk.session", session.Token);
                        AfterConnected(this, EventArgs.Empty);
                    });
                });
            };

            _client.OnDisconnect = evt =>
            {
                Logger.Log("Disconnected from server.");
                if (_doReconnect && _reconnectCount < MaxReconnectAttempts)
                {
                    _reconnectCount++;
                    _dispatchQueue.Enqueue(() => { Reconnect(); });
                }
                else
                {
                    _dispatchQueue.Clear();
                    _dispatchQueue.Enqueue(() => { AfterDisconnected(this, EventArgs.Empty); });
                }
            };
            _client.OnError = error => ErrorHandler(error);
        }
    private void SessionHandler(INSession session)
    {
        _session = session;
        Debug.LogFormat("Session: '{0}'.", session.Token);
        _client.Connect(_session, (bool done) => {
            // We enqueue callbacks which contain code which must be dispatched on
            // the Unity main thread.
//			foreach(Action a in OnSessionConnectedActions) {
//				a();
//			}


            Enqueue(() => {
                Debug.Log("Session connected.");
                // Store session for quick reconnects.
                onSessionConnected(session);
                PlayerPrefs.SetString("nk.session", session.Token);
            });
        });
    }
예제 #13
0
        public void RegisterCustom_Valid()
        {
            ManualResetEvent evt    = new ManualResetEvent(false);
            INSession        result = null;

            INClient client  = NClient.Default(DefaultServerKey);
            var      message = NAuthenticateMessage.Custom(random.GetString());

            client.Register(message, (INSession session) =>
            {
                result = session;
                evt.Set();
            }, (INError error) =>
            {
                evt.Set();
            });

            evt.WaitOne(500, false);
            Assert.NotNull(result);
            Assert.NotNull(result.Token);
        }
예제 #14
0
        // This initializes the server with fake data so that views are not empty when loaded.
        // This assumes that the current user is connected to the system.
        public static void Init()
        {
            if (_initializedFakeData)
            {
                return;
            }

            Client.Register(BuildAuthenticationMessage(), session =>
            {
                _user1Session = session;
                Client.Connect(_user1Session, c =>
                {
                    SetupUser1();
                    Client.Disconnect();

                    Client.Register(BuildAuthenticationMessage(), session2 =>
                    {
                        _user2Session = session2;
                        Client.Connect(_user2Session, c2 =>
                        {
                            SetupUser2();
                            Client.Disconnect();

                            Client.Register(BuildAuthenticationMessage(), session3 =>
                            {
                                _user3Session = session3;
                                Client.Connect(_user3Session, c3 =>
                                {
                                    SetupUser3();
                                    Client.Disconnect();

                                    SetupMainUser();
                                    _initializedFakeData = true;
                                });
                            }, ErrorHandler);
                        });
                    }, ErrorHandler);
                });
            }, ErrorHandler);
        }
예제 #15
0
        public void SetUp()
        {
            ManualResetEvent evt   = new ManualResetEvent(false);
            INError          error = null;

            client = new NClient.Builder(DefaultServerKey).Build();
            string id      = TestContext.CurrentContext.Random.GetString();
            var    message = NAuthenticateMessage.Device(id);

            client.Register(message, (INSession authenticated) =>
            {
                session = authenticated;
                client.Connect(session);
                evt.Set();
            }, (INError err) => {
                error = err;
                evt.Set();
            });

            evt.WaitOne(1000, false);
            Assert.IsNull(error);
        }
    void OnServerSessionCreatedOrRestored(INSession session)
    {
        Debug.Log("Session created or restored");

        client.Connect(session, OnConnected);
    }
예제 #17
0
 // clear all application cached data
 public static void clear()
 {
     session = null;
     client  = null;
     data    = new Dictionary <string, Object> ();
 }
예제 #18
0
 public void Connect(INSession session, Action <bool> callback)
 {
     transport.ConnectAsync(getWebsocketUri(session), callback);
 }
예제 #19
0
 public void Connect(INSession session)
 {
     transport.Connect(getWebsocketUri(session));
 }
예제 #20
0
 public void Connect(INSession session)
 {
     transport.Connect(getWebsocketUri(session), session.UdpToken);
 }
예제 #21
0
 public void Connect(INSession session, Action <bool> callback)
 {
     _client.Connect(session, (bool done) => {
         Enqueue(() => callback(done));
     });
 }
예제 #22
0
 public void Connect(INSession session)
 {
     _client.Connect(session);
 }