Example #1
0
        public async Task <User> ValidateUser(string username, string password)
        {
            User user = new User();

            try
            {
                LoginMessage loginMessage = new LoginMessage {
                    username = username, password = _encryptor.Encrypt(password)
                };
                HttpClient client     = new HttpClient();
                string     serialized = JsonSerializer.Serialize(loginMessage);
                Console.WriteLine(serialized);

                StringContent       content         = new StringContent(serialized, Encoding.UTF8, "application/json");
                HttpResponseMessage responseMessage = await client.PostAsync(URI + "/auth", content);

                var reponseContent = await responseMessage.Content.ReadAsStringAsync();

                user = JsonSerializer.Deserialize <User>(reponseContent);
                Console.WriteLine("Testing returns:");
                Console.WriteLine(user.username);
                Console.WriteLine(user.password);
                Console.WriteLine(user.id);
            }
            catch (HttpRequestException e)
            {
                Console.WriteLine(e);
            }
            return(user);
        }
Example #2
0
    void _OnHandleReceivedPacket(Transmitter transmitter, int idCommand, byte[] aPacketBuffer, int iPos)
    {
        ECommand eCommand = (ECommand)idCommand;

        if (eCommand == ECommand.LOGIN)
        {
            LoginMessage msg = new LoginMessage();
            msg.UnSealPacketBuffer(aPacketBuffer, iPos);
            msg.Unserialize();

            OnLoginMessage(transmitter, msg);
        }
        else if (eCommand == ECommand.EXIT)
        {
            ExitMessage msg = new ExitMessage();
            msg.UnSealPacketBuffer(aPacketBuffer, iPos);
            msg.Unserialize();

            OnExitMessage(transmitter, msg);
        }
        else if (eCommand == ECommand.MOVEMENT)
        {
            MovementMessage msg = new MovementMessage();
            msg.UnSealPacketBuffer(aPacketBuffer, iPos);
            msg.Unserialize();

            OnMovementMessage(transmitter, msg);
        }
    }
Example #3
0
        public static void SendLogin()
        {
            LoginMessage pmsg = new LoginMessage(Nickname);
            string       str  = JsonConvert.SerializeObject(pmsg).ToString();

            Common.doSend(clientSocket, str);
        }
Example #4
0
        public static void LogInUser()
        {
            bool isUserLoggedIn = false;
            var  api            = new API();

            do
            {
                Console.Clear();
                Console.Write("Enter user name:\n");
                var userName = Console.ReadLine();
                Console.Write("Enter password:\n");
                var password = Console.ReadLine();
                var result   = api.Login(userName, password);
                if (result == null)
                {
                    var input = LoginMessage.Error();
                    if (input != "")
                    {
                        Console.Clear();
                        break;
                    }
                }
                else
                {
                    LoginMessage.Success(userName);
                    isUserLoggedIn = true;
                }
            } while (isUserLoggedIn == false);
        }
Example #5
0
    public override void ReceiveData(byte[] _bytes)
    {
        if (uid != -1)
        {
            BattleManager.Instance.ReceiveData(uid, _bytes);
        }
        else
        {
            using (MemoryStream ms = new MemoryStream(_bytes))
            {
                using (BinaryReader br = new BinaryReader(ms))
                {
                    try
                    {
                        CsPackageTag tag = (CsPackageTag)br.ReadInt32();

                        if (tag == CsPackageTag.Login)
                        {
                            LoginMessage message = LoginMessage.Parser.ParseFrom(ms);

                            uid = int.Parse(message.Name);

                            PlayerUnitManager.Instance.Login(uid, this);

                            BattleManager.Instance.Login(uid);
                        }
                    }
                    catch (Exception e)
                    {
                        Log.Write(e.ToString());
                    }
                }
            }
        }
    }
Example #6
0
        public void ProcessLogin(LoginMessage msg)
        {
            Player player = _server.GetPlayerUnlogged(msg.UserId);

            if (null == player || player.State == MenuState.Invalid)
            {
                return;
            }

            int unloggedkey = player.Id;

            if (Login(msg.Login, msg.Password))
            {
                MenuState state = PlayerStateMachine.Transform(player.State, MenuAction.Login);
                if (state == MenuState.Invalid)
                {
                    SendMessage(MessageFactory.Create(MessageType.LoginUnsuccessful), player.Id);
                    return;
                }
                player.State = state;
                player.SetData(LoadPlayerData(msg.Login));
            }

            _server.Chat.AddPlayer(player);
            SendMessage((MessageFactory.Create(MessageType.LoginSuccessful)), player.Id);
        }
Example #7
0
 public MainWinViewModel(LoginMessage msg, MainWin win)
 {
     this.Win        = win;
     this.User       = msg;
     Win.DataContext = msg;
     OnInit();
 }
Example #8
0
 private void OnLoginComplateHandle(LoginMessage data)
 {
     if (data.isOK)
     {
         /*
          * if (data.data.tutorial < 18)
          * {
          *  JumpOverTutorial(18 - (int)data.data.tutorial, () => {
          *
          *      EventDispatcher.instance.DispatchEvent(new BaseEvent(EventEnum.LOGIN_COMPLATE));
          *  });
          * }
          * else
          * {
          *  EventDispatcher.instance.DispatchEvent(new BaseEvent(EventEnum.LOGIN_COMPLATE));
          * }
          */
         EventDispatcher.instance.DispatchEvent(new LoadingEvent("Login", 1));
         EventDispatcher.instance.DispatchEvent(new BaseEvent(EventEnum.LOGIN_COMPLATE));
     }
     else
     {
         Debug.Log("登录失败:" + data.errmsg);
     }
 }
        public void Update(float time)
        {
            switch (this.m_state)
            {
            case ServerConnectionState.CONNECT:
                if (this.m_messaging.IsConnected())
                {
                    this.m_state = ServerConnectionState.LOGIN;

                    LoginMessage loginMessage = new LoginMessage();

                    loginMessage.SetAccountId(this.m_accountInfo.AccountId);
                    loginMessage.SetPassToken(this.m_accountInfo.PassToken);
                    loginMessage.SetClientMajorVersion(LogicVersion.MAJOR_VERSION);
                    loginMessage.SetClientBuildVersion(LogicVersion.BUILD_VERSION);
                    loginMessage.SetResourceSha(ResourceManager.FINGERPRINT_SHA);
                    loginMessage.SetDevice(Assembly.GetExecutingAssembly().FullName);
                    loginMessage.SetScramblerSeed(this.m_messaging.GetScramblerSeed());

                    this.m_messaging.Send(loginMessage);
                }
                break;

            case ServerConnectionState.LOGIN:
            case ServerConnectionState.LOGGED:
                while (this.m_messaging.TryDequeueReceiveMessage(out PiranhaMessage piranhaMessage))
                {
                    this.m_messageManager.ReceiveMessage(piranhaMessage);
                }
                this.m_messageManager.Update(time);
                this.m_messaging.SendQueue();

                break;
            }
        }
Example #10
0
        public static void CreateLoginTransaction(LoginMessage loginMessage)
        {
            tsNumberRangeModel newNumberRange = new tsNumberRangeModel()
            {
                login_id = (Int32.Parse(DatabaseConnection.querytsNumberRange().login_id) + 1).ToString()
            };

            tsLoginDetailModel tsLoginDetailModel = new tsLoginDetailModel()
            {
                login_id         = newNumberRange.login_id,
                login_account_id = loginMessage.zAccountDetailModel.account_id,
                login_username   = loginMessage.zAccountDetailModel.account_username,
                login_time       = DateTime.Now.ToString("HHmm"),
                login_date       = DateTime.Now.Date.ToString("ddMMyyyy"),
                login_ip         = GlobalFunctions.GetIPAddress(),
                login_token      = "null",
                login_status     = loginMessage.returnStatusModel.status.ToString()
            };

            DatabaseConnection.inserttsLoginDetail(tsLoginDetailModel);
            returnStatusModel = DatabaseConnection.updatetsNumberRange(newNumberRange);

            if (GlobalFunctions.isNotError(returnStatusModel.status))
            {
                GlobalFunctions.ShowDebug("COMPLETED");
            }
        }
        public void Execute()
        {
            var channel = _contexts.session.clientSessionObjects.NetworkChannel;
            var token   = _contexts.session.clientSessionObjects.LoginToken;

            if (channel != null && channel.IsConnected)
            {
                if (!_loginSended)
                {
                    _loginSended = true;
                    var message = LoginMessage.Allocate();
                    message.Token      = token;
                    message.LoginStage = ELoginStage.RequestSnapshot;
                    message.ComponentSerializerVersion = ComponentSerializerManager.HashMd5;
                    channel.SendReliable((int)EClient2ServerMessage.Login, message);

                    _logger.InfoFormat("Sending Login Message {0}", message);
                    message.ReleaseReference();
                }

                if (_loginSuccReceived)
                {
                    _sessionState.FullfillExitCondition(typeof(RequestSnapshotSystem));
                }
            }
        }
Example #12
0
        public async Task <IActionResult> Login([FromBody] LoginMessage loginMessage)
        {
            var invalidLoginOrPasswordResult = BadRequest("Invalid login or password");

            if (loginMessage == null || String.IsNullOrEmpty(loginMessage.Login) || String.IsNullOrEmpty(loginMessage.Password))
            {
                return(invalidLoginOrPasswordResult);
            }

            UserAuthenticationInfo userAuthenticationInfo;

            using (var tx = _transactionManager.CreateTransaction())
            {
                userAuthenticationInfo = await _users.ByIdAsync(tx, loginMessage.Login, loginMessage.Login);
            }

            if (userAuthenticationInfo == null)
            {
                return(invalidLoginOrPasswordResult);
            }

            string receivedHash = _passwordHasher.GetHash(userAuthenticationInfo.PasswordSalt, loginMessage.Password);

            if (receivedHash != userAuthenticationInfo.PasswordHash)
            {
                return(invalidLoginOrPasswordResult);
            }

            string token = _jwtManager.GenerateToken(userAuthenticationInfo.Id);

            return(Ok(new { id = userAuthenticationInfo.Id, token = token }));
        }
    void OnClientLogin(NetworkConnection conn, LoginMessage message)
    {
        Debug.Log("Client has logged in");
        // Character character;


        //using (StreamReader stream = new StreamReader(charPath + message.account + ".json"))
        //{

        //    string json = stream.ReadToEnd();
        //    character = JsonUtility.FromJson<Character>(json);
        //}



        // playerPrefab is the one assigned in the inspector in Network
        // Manager but you can use different prefabs per race for example
        GameObject go = Instantiate(player);
        Player     playerComponent = go.GetComponent <Player>();

        playerComponent.playerName = accountName;

        // call this to use this gameobject as the primary controller

        NetworkServer.AddPlayerForConnection(conn, go);
        Debug.Log(conn.connectionId);
    }
Example #14
0
        public void OnLogin(object sender, LoginMessage message)
        {
            if (_connections.ContainsKey(message.GetSource().RemoteUniqueIdentifier))
            {
                var connection = _connections[message.GetSource().RemoteUniqueIdentifier];

                Guid playerId;
                var  player = ManagerPlayer.Instance.GetPlayerByConnectionId(message.GetSource().RemoteUniqueIdentifier);
                if (player == null)
                {
                    playerId = ManagerPlayer.Instance.AddPlayer(connection, message.UserName);
                }
                else
                {
                    playerId = player.Player.Id;

                    message.Message = "Player already logged";
                }

                message.Result   = true;
                message.PlayerId = playerId;
                message.SetDestinataires(new List <NetConnection>()
                {
                    connection
                });

                ManagerNetwork.Instance.Login(message);
            }
            else
            {
                throw new Exception("Connection not finded");
            }
        }
Example #15
0
        /// <summary>
        /// Returns whether we should handle this device or nah.
        /// </summary>
        private static bool Trusted(Device Device, LoginMessage Message)
        {
            Logging.Info(typeof(LoginHandler), "Trusted().");

            if (Message.HighId < 0 || Message.LowId < 0)
            {
                throw new LogicException(typeof(LoginMessage), "HighId or LowId is inferior to zero.");
            }
            else
            {
                if (Message.MajorVersion == Config.ClientMajorVersion && Message.MinorVersion == 0 && Message.BuildVersion == Config.ClientBuildVersion)
                {
                    if (Program.Initialized)
                    {
                        if (string.Equals(Message.MasterHash, Fingerprint.Masterhash))
                        {
                            return(true);
                        }

                        Device.NetworkManager.SendMessage(new LoginFailedMessage(Reason.Patch));
                    }
                    else
                    {
                        Device.NetworkManager.SendMessage(new LoginFailedMessage(Reason.Maintenance));
                    }
                }
                else
                {
                    Device.NetworkManager.SendMessage(new LoginFailedMessage(Reason.Update));
                }
            }

            return(false);
        }
Example #16
0
 // -------------------------------------------------------------------------------
 public void OnLoginMessage(NetworkConnection conn, LoginMessage msg)
 {
     if (Database.singleton.TryLogin(msg.authUsername, msg.authPassword))
     {
         manager.LoginPlayer(conn, msg.authUsername);
     }
 }
        /// <summary>
        /// send credentials to get user token
        /// </summary>
        /// <param name="username"></param>
        /// <param name="password"></param>
        /// <param name="facebookId"></param>
        /// <returns></returns>
        public string Login(string username, string password, string facebookId = "")
        {
            var message = new LoginMessage()
            {
                FacebookId = facebookId,
                Username   = username,
                Password   = password
            };

            var httpResponse = HttpRequestHelper.PostObjectAsync(Endpoint + "/login", message).Result;
            var body         = HttpRequestHelper.GetContent(httpResponse).Result;
            var statusCode   = HttpRequestHelper.GetStatusCode(httpResponse);

            if (statusCode != HttpStatusCode.OK)
            {
                throw new Exception(body);
            }

            var token = JsonConvert.DeserializeObject <string>(body);

            if (!string.IsNullOrWhiteSpace(token))
            {
                UserToken.Token = token;
            }

            return(token);
        }
Example #18
0
        public void HandleMessage(MemoryStream memoryStream, Session session)
        {
            var          login = ProtobufHelper.FromStream(typeof(LoginMessage), memoryStream) as LoginMessage;
            var          conn  = DBHelper.Instance.GetConnection();
            AccountDAO   dao   = new AccountDAO();
            LoginMessage ms    = new LoginMessage();

            if (login == null)
            {
                ms.Message = "N";
            }
            else
            {
                Account result = dao.VerifyAccount(conn, login.Email, login.Password, null);
                if (result == null)
                {
                    ms.Message = "N";
                }
                else
                {
                    ms.Message  = "Y";
                    ms.Id       = result.Id;
                    ms.Username = result.UserName;
                    ms.Password = result.Password;
                    ms.Email    = result.Email;
                    ms.Phone    = result.Phone;
                }
            }
            ResponseMessage(ms, session);
        }
        public override void HandleMessage(BaseMessage message)
        {
            LoginMessage msg = (LoginMessage)message;

            JobSystem.JobSystemManager.Manager.PlayerToJobSystem.Add(msg.PlayerID, new JobSystem.JobSystem(new Dictionary <Guid, Living>(), msg.PlayerID));//Need to handle game loads, saves, player connect, and player disconnect
            JobSystem.JobSystemManager.Manager.EvaluateUnassigned();
        }
Example #20
0
 private void HandleUserMessage(Message mex)
 {
     // Logical switch on mex type
     if (mex is LoginMessage)
     {
         LoginMessage lgMex = (LoginMessage)mex;
         Validate(lgMex.Username, lgMex.Password);
         this.Username = lgMex.Username;
         LoadData();
         Write(new LoginReplyMessage(true, Ranking, Points));
         ConnectionManager.Instance.NewLogin(this);
     }
     else if (mex is ShutdownMessage)
     {
         Log("User at " + Client.Remote + " has shutdown");
         mex = (ShutdownMessage)mex;
         ConnectionManager.Instance.DropUser(this);
     }
     else if (mex is ActionMessage)
     {
         this.HandleActionMessage((ActionMessage)mex);
     }
     // Default
     else
     {
         Log("Unknown Message received (ignored)");
     }
 }
Example #21
0
        public void ProcessLoginMessage(LoginMessage lm)
        {
            if (_Client == null)
            {
                return;
            }
            Player p = new Player(lm.ComputerPlayer);

            p.PlayerID         = lm.Id;
            p.Name             = lm.Username;
            p.Release          = lm.Major;
            p.Revision         = lm.Minor;
            p.Build            = lm.Build;
            p.LibRelease       = lm.Lib_Major;
            p.LibRevision      = lm.Lib_Minor;
            p.LibBuild         = lm.Lib_Build;
            p.ClientTitle      = lm.Title;
            p.FrameworkVersion = lm.Framework;
            p.OSVersion        = lm.Os;
            if (lm.Ready)
            {
                p.ReadyToPlay = true;
            }

            _Client.AddPlayer(p);
            if (_LoginMessageDelegate != null)
            {
                _LoginMessageDelegate(p, lm.Fresh);
            }
        }
Example #22
0
        private void Login(object sender, RoutedEventArgs e)
        {
            HomeUserControl _homeUserControl = new HomeUserControl();
            MainWindow      mainWindow       = new MainWindow();

            DatabaseConnection.SetConnection();
            DatabaseConnection.querySystemDetail();

            loginModel.login_username = usernameTextblock.Text;
            loginModel.Login_password = passwordTextblock.Password;

            loginMessage = LoginController.Login(loginModel);
            GlobalFunctions.ShowDebug(loginMessage.returnStatusModel.error_message);


            if (loginMessage.returnStatusModel.status == true)
            {
                //test solution store in GlobalVar but not recommend
                //GlobalVariables._mainWindow.ListViewItemHome_Selected(sender, e);
                //Change to Open Windows
                mainWindow.Show();
                this.Close();
            }
            else
            {
                passwordTextblock.Clear();
            }
        }
Example #23
0
        public override void Reset()
        {
            base.Reset();

            Channel = null;
            Message = null;
        }
Example #24
0
        protected void LoginButton_Click(Object sender, EventArgs e)
        {
            LoginMessage LoginMsg = new LoginMessage();

            LoginMsg.UserName = this.UserName.Text;
            LoginMsg.Password = Password.Text;

            //i9MessageManager.mIi9MessageManager = new InvertService.BusinessLib.i9MessageManagerBLL();
            i9Message responseMsg = i9MessageManagerBLL.SendMessage(MobileMessageType.Admin, AdminType.Login, "LoginPage", LoginMsg.GetType(), LoginMsg);

            if (responseMsg.ErrorStatus.IsError)
            {
                FailureText.Text = responseMsg.ErrorStatus.ErrorMsg;
                return;
            }

            if (responseMsg.MsgBodyDataSet.Tables[0].Rows.Count <= 0)
            {
                FailureText.Text = "Wrong user name or password, please try again.";

                return;
            }

            //Go To Main Window
            Session.Add("Login", "true");
            Session.Add("Badge", responseMsg.MsgBodyDataSet.Tables["i9SysPersonnel"].Rows[0]["BadgeNumber"].ToString());
            Session.Add("LoginDataSet", responseMsg.MsgBodyDataSet);

            Response.Redirect("~/");
        }
Example #25
0
    public void OnClientConnected(NetworkMessage message)
    {
        Debug.Log("Connected to server2. " + client.isConnected);

        LoginMessage login = new LoginMessage(username);

        ClientScene.AddPlayer(message.conn, 2, login);
    }
Example #26
0
        private void ShowLoginWindow(LoginMessage message)
        {
            var login = new LoginWindow();
            var dialogResult = login.ShowDialog();

            if (!dialogResult.HasValue || !dialogResult.Value)
                Close();
        }
Example #27
0
        /// <summary>
        /// Creates the login message
        /// </summary>
        /// <param name="cred">Creates login message </param>
        /// <returns></returns>
        private AuctionLibrary.Message CreateLoginMessage(string args)
        {
            string search = args;

            string[] result            = search.Split(':');
            AuctionLibrary.Message msg = new LoginMessage(result[0], result[1]);
            return(msg);
        }
Example #28
0
        public async Task <ApiResult> PostLogin(LoginMessage message)
        {
            User user = await _userService.LoginUser(message);

            var userModel = _mapper.Map <Core.Models.User>(user);

            return(userModel != null?ApiResult.Success(userModel) : ApiResult.BadRequest());
        }
Example #29
0
        public static Message CreateLoginMessage(int i)
        {
            LoginMessage lm = MessageFactory.Create(MessageType.Login) as LoginMessage;

            lm.Login    = i.ToString();
            lm.Password = i.ToString();
            return(lm);
        }
Example #30
0
        public void Execute()
        {
            if (SharedConfig.IsOffline)
            {
                if (!_loginSended)
                {
                    _loginSended = true;
                    var sessionObjects             = _contexts.session.commonSession;
                    IEntityIdGenerator idGenerator = sessionObjects.EntityIdGenerator;
                    var id = idGenerator.GetNextEntityId();
                    var _offlineSelector = new OfflineSnapshotSelector(new EntityKey(id, (int)EEntityType.Player),
                                                                       _contexts.session.commonSession.GameContexts);
                    _contexts.session.clientSessionObjects.SnapshotSelectorContainer.SnapshotSelector =
                        _offlineSelector;

                    _contexts.session.clientSessionObjects.SimulationTimer.CurrentTime = 0;
                    _contexts.session.entityFactoryObject.SceneObjectEntityFactory     = new ServerSceneObjectEntityFactory(
                        _contexts.sceneObject, _contexts.player, sessionObjects.EntityIdGenerator, sessionObjects.EntityIdGenerator,
                        _contexts.session.currentTimeObject);
                    _contexts.session.entityFactoryObject.MapObjectEntityFactory =
                        new ServerMapObjectEntityFactory(_contexts.mapObject, sessionObjects.EntityIdGenerator);

                    IPlayerInfo playerInfo = TestUtility.CreateTestPlayer();
                    playerInfo.EntityId = id;
                    var player = PlayerEntityFactory.CreateNewPlayerEntity(_contexts.player,
                                                                           SingletonManager.Get <MapsDescription>().SceneParameters.PlayerBirthPosition, playerInfo, true, false);
                    _offlineSelector.Init();
                    _sessionState.FullfillExitCondition(typeof(RequestPlayerInfoSystem));
                    SingletonManager.Get <SubProgressBlackBoard>().Step();
                }
            }
            else
            {
                var channel = _contexts.session.clientSessionObjects.NetworkChannel;
                var token   = _contexts.session.clientSessionObjects.LoginToken;
                if (channel != null && channel.IsConnected)
                {
                    if (!_loginSended)
                    {
                        _loginSended = true;
                        var message = LoginMessage.Allocate();
                        message.Token      = token;
                        message.LoginStage = ELoginStage.GetPlayerInfo;
                        message.ComponentSerializerVersion = ComponentSerializerManager.HashMd5;
                        channel.SendReliable((int)EClient2ServerMessage.Login, message);

                        _logger.InfoFormat("Sending Login Message {0}", message);
                        message.ReleaseReference();
                    }

                    if (_loginSuccReceived)
                    {
                        _sessionState.FullfillExitCondition(typeof(RequestPlayerInfoSystem));
                        SingletonManager.Get <SubProgressBlackBoard>().Step();
                    }
                }
            }
        }
        public void OnLoginHandler(LoginMessage m)
        {
            SessionStorage.Instance.ProfileId = m.SessionInfo.ProfileId;
            SessionStorage.Instance.SessionId = m.SessionInfo.SessionId;

            IsViewVisible = true;

            _appApplicationEnvironment.EventHub.Publish <NeedServerSyncMessage>(new NeedServerSyncMessage());
        }
Example #32
0
 private void PageState(LoginMessage loginMessage)
 {
     switch (loginMessage.Reason)
     {
         case Messages.Enums.LoginMessageReason.InApp:
             isInAppLogin = true;
             break;
         case Messages.Enums.LoginMessageReason.Splash:
             isInAppLogin = false;
             break;
     }
 }
Example #33
0
        static void Main(string[] args)
        {
            MessageFactory.Register<LoginMessage>();

            Logger.OnInfo += Console.Write;
            Logger.OnError += Console.Write;

            var remoteIp = IPAddress.Parse("127.0.0.1");

            TcpClientMessageService service = new TcpClientMessageService(remoteIp, 9013);

            service.OnConnected += (o, eventArgs) =>
            {
                TcpClientMessageService service2 = o as TcpClientMessageService;
                Logger.InfoLine("Connectd:{0}", service2.RemoteIPEndPoint);

                LoginMessage lognMessage = new LoginMessage
                {
                    Request =
                    {
                        Name = "Hello",
                        Order = 123
                    }
                };

                service2.Write(lognMessage);
            };

            service.OnDisconnected += (o, eventArgs) =>
            {
                TcpClientMessageService service2 = o as TcpClientMessageService;
                Logger.InfoLine("Disconnected:{0}", service2.RemoteIPEndPoint);
            };
            service.OnRead += ServiceOnRead;
            service.OnError += Service_OnError;

            service.BeginConnect();

            Console.Read();
        }
 /// <summary>
 ///     Sends a login to the master server.
 /// </summary>
 /// <param name="username">The name of the user logging in</param>
 /// <remarks>
 ///     TODO: This only works for master server 0 right now. Must fix eventually.
 /// </remarks>
 private void SendLoginToMasterServer(string username)
 {
     idtomasterserver.Add(usernametoid[username], 0);
     //Send a message to the master server to add the user
     LoginMessage loginmessage = new LoginMessage(GetUser(usernametoid[username]));
     NetOutgoingMessage messagetomaster = MasterServerConnections[(int)idtomasterserver[usernametoid[username]]].CreateMessage();
     messagetomaster.Write((byte)CallSources.LoginServer);
     messagetomaster.Write((byte)LoginServerRequests.Login);
     messagetomaster.Write(Serialize(loginmessage));
     Console.WriteLine(Encoding.ASCII.GetString(messagetomaster.PeekDataBuffer()));
     messagetomaster.Encrypt(new NetXtea("DERPHERP"));
     MasterServerConnections[(int)idtomasterserver[usernametoid[username]]].SendMessage(messagetomaster, NetDeliveryMethod.ReliableOrdered);
 }
        /// <summary>
        ///     Process all information coming from clients, and other servers.
        /// </summary>
        /// <remarks>
        ///     Connection Approval is enabled, so when a client connects to this server it must
        ///     provide the correct data. That is a username and id.
        ///     The login server gets a special case, in that its username is "lgn", and its id is Guid.Empty.
        ///     If the master server hasn't been notified by the login server that a user is logging in, it won't
        ///     know about this information and will reject the client.
        /// </remarks>
        public void Process()
        {
            NetIncomingMessage msg;
            //Read what incoming messages we have from clients
            while ((msg = LidgrenServer.ReadMessage()) != null)
            {
                switch (msg.MessageType)
                {
                    //If it is a debug message, warning message, or status changed print the relevant information to the console
                    case NetIncomingMessageType.DebugMessage:
                        Console.WriteLine("Debug message: " + msg.ReadString());
                        break;

                    case NetIncomingMessageType.WarningMessage:
                        Console.WriteLine("Warning message: " + msg.ReadString());
                        break;

                    case NetIncomingMessageType.StatusChanged:
                        Console.WriteLine("Status changed for " + msg.SenderEndpoint + " to " + msg.SenderConnection.Status);
                        break;

                    //Check the connection approval for an accepted username and userid
                    case NetIncomingMessageType.ConnectionApproval:
                        //Read the username an userid from the message
                        string username = msg.ReadString();
                        Guid userid = new Guid(msg.ReadBytes(msg.LengthBytes - msg.PositionInBytes));

                        //If the username is "lgn" and the userid is Guid.Empty, this is the login server's client. Let it connect regardless.
                        //We should probably validate this harder in the future
                        if (username == "lgn" && userid == Guid.Empty)
                        {
                            Console.WriteLine("Login accept");
                            msg.SenderConnection.Approve();
                        }
                        //If the user with the userid and username has already been accepted by the login server
                        //and their information has been sent here, let them be accepted.
                        else if (Users.ContainsKey(userid) && Users[userid].Username == username)
                        {
                            Console.WriteLine("User: "******" accept.");
                            Users[userid].Connection = msg.SenderConnection;
                            msg.SenderConnection.Approve();
                        }
                        //Otherwise, don't let them in here.
                        else
                        {
                            Console.WriteLine("User: "******" with userid " + userid + " reject.");
                            msg.SenderConnection.Deny();
                        }
                        break;

                    case NetIncomingMessageType.Data:
                        //We are decrypting data. All data sent to a master server is encrypted with key "DERPHERP".
                        msg.Decrypt(new NetXtea("DERPHERP"));

                        //Figure out where this data came from.
                        CallSources source = (CallSources)msg.ReadByte();
                        Console.WriteLine("Got data from " + source);

                        //If we got the data from a login server
                        if (source == CallSources.LoginServer)
                        {
                            //Figure out what kind of login server request it is.
                            LoginServerRequests request = (LoginServerRequests)msg.ReadByte();

                            //If a user logged in, deal with it.
                            if (request == LoginServerRequests.Login)
                            {
                                //Deserialize our login message from the login server
                                LoginMessage loginmessage = new LoginMessage();
                                loginmessage = Serializer.Deserialize<LoginMessage>(new MemoryStream(msg.ReadBytes(msg.LengthBytes - msg.PositionInBytes)));
                                //Create a new user with the relevant information.
                                User u = new User();
                                u.Connection = msg.SenderConnection;
                                u.Id = loginmessage.LoginUser.Id;
                                u.Username = loginmessage.LoginUser.Username;
                                //Add the user to our master server
                                Users.Add(loginmessage.LoginUser.Id, u);
                                Console.WriteLine(u.Username + " logged in.");
                            }
                            //If a user logged out, double deal with it.
                            else if (request == LoginServerRequests.Logout)
                            {
                                //Deserialize the logout message
                                LogoutMessage logoutmessage = new LogoutMessage();
                                logoutmessage = Serializer.Deserialize<LogoutMessage>(new MemoryStream(msg.ReadBytes(msg.LengthBytes - msg.PositionInBytes)));
                                Console.WriteLine(Users[logoutmessage.UserId].Username + " logged out.");
                                //If this user had an active character (that would be on a region server) send a message to the
                                //region server to remove the character.
                                if(Users[logoutmessage.UserId].ActiveCharacter != null)
                                    SendRemoveCharacterMessage(Users[logoutmessage.UserId].ActiveCharacter.RegionId, logoutmessage.UserId);
                                //Remove the user from the master server.
                                Users.Remove(logoutmessage.UserId);
                            }
                        }
                        //If we got a message from the client
                        else if (source == CallSources.Client)
                        {
                            //It is a remote procedure call, so figure out what kind it is
                            RemoteProcedureCallCodes callcode = (RemoteProcedureCallCodes)msg.ReadByte();
                            //The user created a character.
                            if (callcode == RemoteProcedureCallCodes.CreateCharacter)
                            {
                                //Deserialize that message
                                CreateCharacterRequest createcharactersrequest = new CreateCharacterRequest();
                                createcharactersrequest = Serializer.Deserialize<CreateCharacterRequest>(new MemoryStream(msg.ReadBytes(msg.LengthBytes - msg.PositionInBytes)));

                                //See if a character with the name requested already exists.
                                if (!CharacterExists(createcharactersrequest.Name))
                                {
                                    //Create a new character with a new guid.
                                    Guid newguid = Guid.NewGuid();
                                    //With arbitrary information about the character for now. Default regionid 0, default pos and rot, default race, height and weight.
                                    Character character = new Character(createcharactersrequest.Name, RaceCode.human, 5, 170, newguid, new Vector3(0.0f, 10.0f, 0.0f), new Vector3(0.0f, 0.0f, 0.0f), 0, new Dictionary<ulong,int>());
                                    //Add the character to be associated with this user id.
                                    UserIdToCharacters[createcharactersrequest.UserId].Add(character);
                                    //Send a resposne to the client saying the creation was successful
                                    SendCreateCharacterResponse(msg.SenderConnection, true);
                                    Console.WriteLine("User " + Users[createcharactersrequest.UserId].Username + " created a character named " + createcharactersrequest.Name);
                                }
                                else
                                {
                                    //Otherwise send a response to the client saying the creation was unsuccessful
                                    SendCreateCharacterResponse(msg.SenderConnection, false);
                                    Console.WriteLine("User " + Users[createcharactersrequest.UserId].Username + " couldn't create a character named " + createcharactersrequest.Name);
                                }
                            }
                            //The user needs to get characters, so they can see which one to select
                            else if (callcode == RemoteProcedureCallCodes.GetCharacters)
                            {
                                //Deserialize the get characters request
                                GetCharactersRequest getcharactersrequest = new GetCharactersRequest();
                                getcharactersrequest = Serializer.Deserialize<GetCharactersRequest>(new MemoryStream(msg.ReadBytes(msg.LengthBytes - msg.PositionInBytes)));

                                //Make sure this user has a character list started
                                if (UserIdToCharacters.ContainsKey(getcharactersrequest.UserId))
                                {
                                    //If so, send the get characters response
                                    SendGetCharactersResponse(msg.SenderConnection, getcharactersrequest.UserId);
                                }
                                else
                                {
                                    //Else make a new list, and send the get characters response
                                    UserIdToCharacters.Add(getcharactersrequest.UserId, new List<Character>());
                                    SendGetCharactersResponse(msg.SenderConnection, getcharactersrequest.UserId);
                                }
                                Console.WriteLine("Getting Characters for " + Users[getcharactersrequest.UserId].Username);
                            }
                            //The user selected a character and is entering the world.
                            else if (callcode == RemoteProcedureCallCodes.EnterWorld)
                            {
                                //Deserialize the enterworld request
                                EnterWorldRequest enterworldrequest = new EnterWorldRequest();
                                enterworldrequest = Serializer.Deserialize<EnterWorldRequest>(new MemoryStream(msg.ReadBytes(msg.LengthBytes - msg.PositionInBytes)));

                                //Set this users active character to the one selected.
                                Users[enterworldrequest.UserId].ActiveCharacter = UserIdToCharacters[enterworldrequest.UserId].Find(delegate(Character c) { return c.Id == enterworldrequest.CharacterId; });

                                //Send an Add Character Message to the appropriate region server
                                AddCharacterMessage(UserIdToCharacters[enterworldrequest.UserId].Find(delegate(Character c) { return c.Id == enterworldrequest.CharacterId; }), Users[enterworldrequest.UserId].ActiveCharacter.Position, null, enterworldrequest.UserId);
                                Console.WriteLine("User " + Users[enterworldrequest.UserId].Username + " made their character " + Users[enterworldrequest.UserId].ActiveCharacter.Name + " enter the world into region " + Users[enterworldrequest.UserId].ActiveCharacter.RegionId);

                            }
                            else if (callcode == RemoteProcedureCallCodes.Teleport)
                            {
                                TeleportRequest request = Serializer.Deserialize<TeleportRequest>(new MemoryStream(msg.ReadBytes(msg.LengthBytes - msg.PositionInBytes)));

                                TeleportMessage(Users[request.UserId].ActiveCharacter.RegionId, request.UserId, request.TeleportId);
                                Console.WriteLine("Teleport request.");
                            }
                            //The client sent a character snapshot (position, rotation, velocity)
                            else if (callcode == RemoteProcedureCallCodes.CharacterSnapshot)
                            {
                                CharacterSnapshot snapshot = new CharacterSnapshot();
                                snapshot = Serializer.Deserialize<CharacterSnapshot>(new MemoryStream(msg.ReadBytes(msg.LengthBytes - msg.PositionInBytes)));
                                SendCharacterSnapshotMessage(Users[snapshot.UserId].ActiveCharacter.RegionId, snapshot);
                                //Console.WriteLine("Snapshot for " + Users[snapshot.UserId].ActiveCharacter.Name);
                            }

                            else if (callcode == RemoteProcedureCallCodes.DropItem)
                            {
                                DropItemRequest request = Serializer.Deserialize<DropItemRequest>(new MemoryStream(msg.ReadBytes(msg.LengthBytes - msg.PositionInBytes)));

                                DropItemMessage(Users[request.UserId].ActiveCharacter.RegionId, request.ItemId, request.UserId);
                                Console.WriteLine("Drop Item request for " + Users[request.UserId].ActiveCharacter.Name);
                            }
                            else if (callcode == RemoteProcedureCallCodes.PickupItem)
                            {
                                PickupItemRequest request = Serializer.Deserialize<PickupItemRequest>(new MemoryStream(msg.ReadBytes(msg.LengthBytes - msg.PositionInBytes)));
                                //TODO
                                PickupItemMessage(Users[request.UserId].ActiveCharacter.RegionId, request.UserId, request.ItemSpawnId);
                            }
                        }
                        break;
                }
                LidgrenServer.Recycle(msg);
            }
            //Or we recieved a message from one of the many region servers
            foreach (NetClient regionclient in RegionServers.Values)
            {
                NetIncomingMessage regionmessage;
                //Read a message from the queue
                while ((regionmessage = regionclient.ReadMessage()) != null)
                {
                    switch (regionmessage.MessageType)
                    {
                        //If it is debug, warning, or status changed output to screen
                        case NetIncomingMessageType.DebugMessage:
                            Console.WriteLine("Region Debug: " + regionmessage.ReadString());
                            break;
                        case NetIncomingMessageType.WarningMessage:
                            Console.WriteLine("Region Warning: " + regionmessage.ReadString());
                            break;

                        case NetIncomingMessageType.StatusChanged:
                            Console.WriteLine("Region status changed: " + regionmessage.SenderConnection.Status);
                            break;

                        //Or we got some actual data
                        case NetIncomingMessageType.Data:
                            //Figure out what kind of message it is
                            RegionMessages messagetype = (RegionMessages)regionmessage.ReadByte();

                            //A character was added to this region
                            if (messagetype == RegionMessages.AddCharacterBroadcast)
                            {
                                Console.WriteLine("Got an Add Character broadcast from a region.");
                                //Deserialize the broadcast
                                AddCharacterBroadcast addbroadcast = Serializer.Deserialize<AddCharacterBroadcast>(new MemoryStream(regionmessage.ReadBytes(regionmessage.LengthBytes - regionmessage.PositionInBytes)));

                                //Send an event to all the relevant users using their userid
                                foreach (Guid userid in addbroadcast.RecivingUserIds)
                                {
                                    SendEnterRegionEvent(Users[userid].Connection, addbroadcast.EnteringCharacter, addbroadcast.UserId);
                                }
                            }
                            //A user asked what characters were in this region, so we relay it back via enter region response
                            else if (messagetype == RegionMessages.AddCharacterResponse)
                            {
                                Console.WriteLine("Relaying characters in region as well as position.");
                                AddCharacterResponseMessage message = Serializer.Deserialize<AddCharacterResponseMessage>(new MemoryStream(regionmessage.ReadBytes(regionmessage.LengthBytes - regionmessage.PositionInBytes)));
                                Console.WriteLine(message.Location.X + " " + message.Location.Y + " " + message.Location.Z);
                                SendEnterRegionResponse(Users[message.MeantForUserId].Connection, message.Characters, message.ItemSpawns, message.Location, message.RegionId);
                            }
                            //A character was removed from this region
                            else if (messagetype == RegionMessages.RemoveCharacterBroadcast)
                            {
                                Console.WriteLine("Got a Remove Character broadcast from a region.");
                                //Deserialize the broadcast
                                RemoveCharacterBroadcast exitregionbroadcast = Serializer.Deserialize<RemoveCharacterBroadcast>(new MemoryStream(regionmessage.ReadBytes(regionmessage.LengthBytes - regionmessage.PositionInBytes)));

                                //Send it to all relevant user ids
                                foreach (Guid userid in exitregionbroadcast.RecivingUserIds)
                                {
                                    SendExitRegionEvent(Users[userid].Connection, exitregionbroadcast.UserId);
                                }
                            }
                            //A character sent a snapshot of their information to the region
                            else if (messagetype == RegionMessages.CharacterSnapshotBroadcast)
                            {
                                Console.WriteLine("Got a character snapshot broadcast from a region.");
                                CharacterSnapshotBroadcast charsnapbroadcast = Serializer.Deserialize<CharacterSnapshotBroadcast>(new MemoryStream(regionmessage.ReadBytes(regionmessage.LengthBytes - regionmessage.PositionInBytes)));

                                //Send the event to all relevant users
                                foreach (Guid userid in charsnapbroadcast.ReceivingUserIds)
                                    SendCharacterSnapshotEvent(Users[userid].Connection, charsnapbroadcast.Snapshot);
                            }

                            else if (messagetype == RegionMessages.TeleportCharacterResponse)
                            {
                                TeleportResponseMessage message = Serializer.Deserialize<TeleportResponseMessage>(new MemoryStream(regionmessage.ReadBytes(regionmessage.LengthBytes - regionmessage.PositionInBytes)));
                                Users[message.UserId].ActiveCharacter.RegionId = message.ExitRegionId;
                                Console.WriteLine("Got teleport character response, and adding character.");
                                AddCharacterMessage(Users[message.UserId].ActiveCharacter, null, message.TeleportExitId, message.UserId);

                            }

                            else if (messagetype == RegionMessages.DropItemResponse)
                            {
                                DropItemResponseMessage message = Serializer.Deserialize<DropItemResponseMessage>(new MemoryStream(regionmessage.ReadBytes(regionmessage.LengthBytes - regionmessage.PositionInBytes)));

                                SendDropItemResponse(Users[message.UserId].Connection, message.Success, message.ItemId);
                            }

                            else if(messagetype == RegionMessages.DropItemBroadcast)
                            {
                                DropItemBroadcast broadcast = Serializer.Deserialize<DropItemBroadcast>(new MemoryStream(regionmessage.ReadBytes(regionmessage.LengthBytes - regionmessage.PositionInBytes)));

                                foreach (Guid userid in broadcast.ReceivingUserIds)
                                {
                                    SendCreateItemSpawnEvent(Users[userid].Connection, broadcast.NewItemSpawn);
                                }
                            }
                            else if(messagetype == RegionMessages.PickupItemResponse)
                            {
                                PickupItemResponseMessage message = Serializer.Deserialize<PickupItemResponseMessage>(new MemoryStream(regionmessage.ReadBytes(regionmessage.LengthBytes - regionmessage.PositionInBytes)));

                                SendTakeItemResponse(Users[message.UserId].Connection, message.Success, message.ItemId);
                            }
                            else if(messagetype == RegionMessages.PickupItemBroadcast)
                            {
                                PickupItemBroadcast broadcast = Serializer.Deserialize<PickupItemBroadcast>(new MemoryStream(regionmessage.ReadBytes(regionmessage.LengthBytes - regionmessage.PositionInBytes)));

                                foreach(Guid userid in broadcast.Recipients)
                                {
                                    SendTakeItemEvent(Users[userid].Connection, broadcast.ItemSpawnId);
                                }
                            }
                            else if (messagetype == RegionMessages.SpawnItemBroadcast)
                            {
                                SpawnItemBroadcast broadcast = Serializer.Deserialize<SpawnItemBroadcast>(new MemoryStream(regionmessage.ReadBytes(regionmessage.LengthBytes - regionmessage.PositionInBytes)));

                                foreach(Guid userid in broadcast.Recipients)
                                {
                                    SendSpawnItemEvent(Users[userid].Connection, broadcast.SpawnId, broadcast.ItemId);
                                }
                            }
                            break;
                    }
                    LidgrenServer.Recycle(regionmessage);
                }
            }
        }
Example #36
0
        private void OnLoginMessage(LoginMessage message)
        {
            if (message.Type == LoginType.LogIn)
            {

                if (message.Service == "vk")
                {
                    ShowSidebar = true;
                    LoadUserInfo();
                }

                if (message.Service == "lastfm")
                    RaisePropertyChanged("LastFmUser");
            }
            else if (message.Type == LoginType.LogOut)
            {
                if (message.Service == "lastfm")
                    RaisePropertyChanged("LastFmUser");
            }
        }
Example #37
0
        /// <summary>
        /// Static method that takes in an xml String and converts it to an AbstractMessage.
        /// 
        /// Will throw an XmlException if the xml String was in an unrecognized format.
        /// </summary>
        /// <param name="xml">A String with xml representing an AbstractMessage</param>
        /// <returns>The AbstractMessage parsed from the XML String</returns>
        public override AbstractMessage Parse(String xml)
        {
            XmlTextReader reader = new XmlTextReader(new StringReader(xml));
            AbstractMessage returnee = null;
            Int32 chatId = 0;

            String element = "";
            String textMessage = "";
            String username = "";
            String password = "";
            String sender = "";

            Boolean accepted = false;
            Boolean isAlreadyLoggedOn = true;
            Boolean alreadyExisted = false;
            Boolean authenticationDisabled = false;

            GroupChat chat = null;
            ExtendedHashSet<String> hashSet = null;

            try
            {
                while (reader.Read())
                {
                    switch (reader.NodeType)
                    {
                        case XmlNodeType.CDATA:
                            switch (element)
                            {
                                case "Message":
                                    textMessage = reader.Value;
                                    break;
                                case "Username":
                                    username = reader.Value;
                                    break;
                                case "Password":
                                    password = reader.Value;
                                    break;
                                case "User":
                                    hashSet.Add(reader.Value);
                                    break;
                                case "Participant":
                                    hashSet.Add(reader.Value);
                                    break;
                                case "Sender":
                                    sender = reader.Value;
                                    break;
                                case "Name":
                                    hashSet.Add(reader.Value);
                                    break;
                                default:
                                    break;
                            }
                            break;

                        case XmlNodeType.Element:
                            element = reader.Name; // define last known element
                            switch (element)
                            {
                                case "UserList":
                                    hashSet = new ExtendedHashSet<String>();
                                    break;
                                case "Participants":
                                    hashSet = new ExtendedHashSet<String>();
                                    break;
                                case "ToBeAdded":
                                    hashSet = new ExtendedHashSet<String>();
                                    break;
                                case "ToBeRemoved":
                                    hashSet = new ExtendedHashSet<String>();
                                    break;
                            }
                            break;

                        case XmlNodeType.EndElement:
                            switch (reader.Name)
                            {
                                case "TextMessage":
                                    returnee = new TextMessage(textMessage);
                                    break;
                                case "LoginMessage":
                                    returnee = new LoginMessage(username, password);
                                    break;
                                case "LoginResponseMessage":
                                    returnee = new LoginResponseMessage(accepted, isAlreadyLoggedOn, username);
                                    break;
                                case "AddToUserListMessage":
                                    returnee = new AddToUserListMessage(hashSet);
                                    break;
                                case "RemoveFromUserListMessage":
                                    returnee = new RemoveFromUserListMessage(hashSet);
                                    break;
                                case "GroupChatMessage":
                                    returnee = new GroupChatMessage(chat, textMessage, sender);
                                    break;
                                case "AddMemberToGroupChatMessage":
                                    returnee = new AddMemberToGroupChatMessage(chatId, hashSet);
                                    break;
                                case "RemoveMemberFromGroupChatMessage":
                                    returnee = new RemoveMemberFromGroupChatMessage(chatId, hashSet);
                                    break;
                                case "StartGroupChatRequestMessage":
                                    returnee = new StartGroupChatRequestMessage(hashSet);
                                    break;
                                case "StartGroupChatResponseMessage":
                                    returnee = new StartGroupChatResponseMessage(chatId, alreadyExisted);
                                    break;
                                case "GroupChatInfoRequestMessage":
                                    returnee = new GroupChatInfoRequestMessage(chatId);
                                    break;
                                case "GroupChatInfoResponseMessage":
                                    returnee = new GroupChatInfoResponseMessage(chat);
                                    break;
                                case "SignupRequestMessage":
                                    returnee = new SignupRequestMessage(username, password);
                                    break;
                                case "SignupResponseMessage":
                                    returnee = new SignupResponseMessage(accepted, alreadyExisted, authenticationDisabled);
                                    break;
                                case "GroupChat":
                                    chat = new GroupChat(hashSet, chatId);
                                    break;
                                default:
                                    break;
                            }
                            break;
                        case XmlNodeType.Text:
                            switch (element)
                            {
                                case "Accepted":
                                    accepted = Boolean.Parse(reader.Value);
                                    break;
                                case "IsAlreadyLoggedOn":
                                    isAlreadyLoggedOn = Boolean.Parse(reader.Value);
                                    break;
                                case "ChatID":
                                    chatId = int.Parse(reader.Value);
                                    break;
                                case "AlreadyExisted":
                                    alreadyExisted = Boolean.Parse(reader.Value);
                                    break;
                                case "AuthenticationDisabled":
                                    authenticationDisabled = Boolean.Parse(reader.Value);
                                    break;
                                default:
                                    break;
                            }
                            break;
                        default:
                            break;
                    }
                }
            }
            catch
            {
                throw new XmlException("Unrecognized XML Format...");
            }
            reader.Close();
            if (returnee != null)
            {
                return returnee;
            }
            else
            {
                throw new XmlException("Unrecognized XML Format...");
            }
        }