コード例 #1
0
        private void HandleUpdateServerInfo(UpdateServerInfo payload, PayloadWriter writer)
        {
            if (_server == null)
            {
                StatusMsg resultPayload1 = Payloads.CreatePayload <StatusMsg>();
                resultPayload1.Errorcode = 3;
                resultPayload1.Errormsg  = "No server";
                resultPayload1.TicketId  = payload.TicketId;
                SendReply(writer, resultPayload1);
                return;
            }

            _server.Name         = payload.Name;
            _server.Description  = payload.Description;
            _server.MaxPlayers   = payload.MaxPlayers;
            _server.RoomId       = payload.RoomId;
            _server.Level        = payload.Level;
            _server.GameMode     = payload.GameMode;
            _server.Hardcore     = payload.Hardcore;
            _server.Running      = payload.Running;
            _server.LockedConfig = payload.LockedConfig;
            _server.Data         = payload.Data;

            SendServerUpdates();

            StatusMsg resultPayload2 = Payloads.CreatePayload <StatusMsg>();

            resultPayload2.Errorcode = 0;
            resultPayload2.Errormsg  = null;
            resultPayload2.TicketId  = payload.TicketId;
            SendReply(writer, resultPayload2);
        }
コード例 #2
0
        private void HandleGetServers(GetServers payload, PayloadWriter writer)
        {
            if (!ServerUpdateReceivers.TryAdd(Connection, Account.Id))
            {
                StatusMsg resultPayload1 = Payloads.CreatePayload <StatusMsg>();
                resultPayload1.Errorcode = 3;
                resultPayload1.Errormsg  = "Can not get server list";
                resultPayload1.TicketId  = payload.TicketId;
                SendReply(writer, resultPayload1);
                return;
            }

            List <Server> servers = Program.Servers.GetServers();

            uint ticketId = payload.TicketId;

            foreach (Server server in servers)
            {
                ServerInfo resultPayload1 = CreateServerInfoPayload(server, ticketId);
                SendReply(writer, resultPayload1);
            }

            StatusMsg resultPayload2 = Payloads.CreatePayload <StatusMsg>();

            resultPayload2.Errorcode = 0;
            resultPayload2.Errormsg  = null;
            resultPayload2.TicketId  = payload.TicketId;
            SendReply(writer, resultPayload2);
        }
コード例 #3
0
        private void HandleGetCdKeys(GetCDKeys payload, PayloadWriter writer)
        {
            uint accountId = payload.UserId;

            if (accountId != Account.Id)
            {
                StatusMsg resultPayload1 = Payloads.CreatePayload <StatusMsg>();
                resultPayload1.Errorcode = 1;
                resultPayload1.Errormsg  = "Incorrect account";
                resultPayload1.TicketId  = payload.TicketId;
                SendReply(writer, resultPayload1);
                return;
            }

            SendCDKey resultPayload2 = Payloads.CreatePayload <SendCDKey>();

            resultPayload2.UserId   = accountId;
            resultPayload2.CdKey    = "0000000000000000";
            resultPayload2.Keypool  = 1;
            resultPayload2.TicketId = payload.TicketId;
            SendReply(writer, resultPayload2);

            StatusMsg resultPayload3 = Payloads.CreatePayload <StatusMsg>();

            resultPayload3.Errorcode = 0;
            resultPayload3.Errormsg  = null;
            resultPayload3.TicketId  = payload.TicketId;
            SendReply(writer, resultPayload3);
        }
コード例 #4
0
        internal async Task Reset()
        {
            Battle = new ColossoBattle();

            if (autoTurn != null)
            {
                autoTurn.Dispose();
            }
            if (resetIfNotActive != null)
            {
                resetIfNotActive.Dispose();
            }

            foreach (var k in Messages.Keys)
            {
                await k.DeleteAsync();
            }

            Messages.Clear();

            if (EnemyMsg != null)
            {
                _ = EnemyMsg.ModifyAsync(c => { c.Content = $"Welcome to {Name} Battle!\n\nReact with <:Fight:536919792813211648> to join the {Name} Battle and press <:Battle:536954571256365096> when you are ready to battle!"; c.Embed = null; });
                await EnemyMsg.RemoveAllReactionsAsync();

                _ = EnemyMsg.AddReactionsAsync(new IEmote[]
                {
                    Emote.Parse("<:Fight:536919792813211648>"),
                    Emote.Parse("<:Battle:536954571256365096>")
                });
            }
            if (StatusMsg != null)
            {
                _         = StatusMsg.DeleteAsync();
                StatusMsg = null;
            }
            winsInARow = 0;
            LureCaps   = 0;
            SetRandomEnemies(ColossoBattle.Team.B);

            autoTurn = new Timer()
            {
                Interval  = 25000,
                AutoReset = false,
                Enabled   = false
            };
            autoTurn.Elapsed += OnTimerTicked;
            resetIfNotActive  = new Timer()
            {
                Interval  = 120000,
                AutoReset = false,
                Enabled   = false
            };
            resetIfNotActive.Elapsed += BattleWasNotStartetInTime;

            Console.WriteLine("Battle was reset.");
        }
コード例 #5
0
        private void HandlePayload157(Payload157 payload, PayloadWriter writer)
        {
            StatusMsg resultPayload = Payloads.CreatePayload <StatusMsg>();

            resultPayload.Errorcode = 0;
            resultPayload.Errormsg  = null;
            resultPayload.TicketId  = payload.TicketId;
            SendReply(writer, resultPayload);
        }
コード例 #6
0
        private async Task WriteGameOver()
        {
            await Task.Delay(2000);

            var winners = Battle.GetTeam(Battle.GetWinner());
            var text    = $"{winners.FirstOrDefault().name}'s Party wins! Battle will reset shortly";
            await StatusMsg.ModifyAsync(m => { m.Content = text; m.Embed = null; });

            await Task.Delay(2000);

            await Reset();
        }
コード例 #7
0
        internal async Task GameOver()
        {
            var winners = Battle.GetTeam(Battle.GetWinner());

            if (Battle.SizeTeamB == 0)
            {
                Console.WriteLine("Game Over with no enemies existing.");
            }
            if (winners.First() is PlayerFighter)
            {
                winsInARow++;
                var wasMimic = Battle.TeamB.Any(e => e.name.Contains("Mimic"));
                winners.ConvertAll(s => (PlayerFighter)s).ForEach(async p => await ServerGames.UserWonBattle(p.avatar, winsInARow, LureCaps, p.battleStats, Diff, TextChannel, winners, wasMimic));
                if (!IsEndless)
                {
                    _ = WriteGameOver();
                }
                else
                {
                    Battle.TeamA.ForEach(p =>
                    {
                        p.PPrecovery += (winsInARow <= 8 * 4 && winsInARow % 4 == 0) ? 1 : 0;
                        p.RemoveNearlyAllConditions();
                        p.Buffs = new List <Buff>();
                        p.Heal((uint)(p.stats.HP * 5 / 100));
                    });

                    var text = $"{winners.First().name}'s Party wins Battle {winsInARow}! Battle will reset shortly";
                    await Task.Delay(2000);

                    await StatusMsg.ModifyAsync(m => { m.Content = text; m.Embed = null; });

                    await Task.Delay(2000);

                    Diff = (BattleDifficulty)Math.Min(4, 1 + winsInARow / stageLength);
                    SetRandomEnemies(ColossoBattle.Team.B);
                    Battle.turn = 0;
                    _           = StartBattle();
                }
            }
            else
            {
                if (IsEndless)
                {
                    Diff = BattleDifficulty.Easy;
                }

                var losers = winners.First().battle.GetTeam(winners.First().enemies);
                losers.ConvertAll(s => (PlayerFighter)s).ForEach(async p => await ServerGames.UserLostBattle(p.avatar, Diff, TextChannel));
                _ = WriteGameOver();
            }
        }
コード例 #8
0
        private void HandleStopServerUpdates(StopServerUpdates payload, PayloadWriter writer)
        {
            uint accountId;

            ServerUpdateReceivers.TryRemove(Connection, out accountId);

            StatusMsg resultPayload = Payloads.CreatePayload <StatusMsg>();

            resultPayload.Errorcode = 0;
            resultPayload.Errormsg  = null;
            resultPayload.TicketId  = payload.TicketId;
            SendReply(writer, resultPayload);
        }
コード例 #9
0
        private void ModemConfiguration_Load(object sender, EventArgs e)
        {
            try
            {
                ConnectionStatusDelegate = new StatusMsg(StatusUpdate);
                BindComPorts();
                BindBaudRate();
                BindDataBits();
                BindParity();
                BindStopBits();
                DefaultSettings();

                if (Constants.ConnectionStatus == Constants.Connectivity.Connected.ToString())
                {
                    statusMessage = "Connected to " + cboPortNo.SelectedItem.ToString();

                    //   lblStatus.Text = "Connected to " + cboPortNo.SelectedItem.ToString();
                    lblColor = Color.Green;
                    InvokeCheckConnection();
                    btnDisConnect.Enabled      = true;
                    btnConnect.Enabled         = false;
                    Constants.IsModemConnected = true;
                }
                else if (Constants.ConnectionStatus == Constants.Connectivity.Disconnected.ToString())
                {
                    statusMessage = "Not Connected";
                    lblColor      = Color.Red;
                    InvokeCheckConnection();
                    Constants.IsModemConnected = false;
                    btnDisConnect.Enabled      = false;
                    btnConnect.Enabled         = true;
                }
                else
                {
                    statusMessage = "Not Connected";
                    lblColor      = Color.Red;
                    InvokeCheckConnection();
                    Constants.IsModemConnected = false;
                    btnDisConnect.Enabled      = false;
                    btnConnect.Enabled         = true;
                }
            }
            catch (Exception ex)
            {
                Logger.Logger.WriteLog(ex);
            }
        }
コード例 #10
0
        void Main(string argument)
        {
            if (dBlocks == null)
            {
                dBlocks = new DamagedBlocks(this, (IMyCockpit)GridTerminalSystem.GetBlockWithName(referenceBlockName));
            }
            if (status == null)
            {
                status = new StatusMsg(this);
            }

            if (argument == "reset")
            {
                status.ClearMessages();
                dBlocks.Reset();
                status.DisplayAll();
            }
            else if (argument.Contains("welders"))
            {
                int    index  = argument.IndexOf('s');
                string number = argument.Substring(index + 1, argument.Length - index - 1);

                if (!int.TryParse(number, out weldersToActivate))
                {
                    status.WriteStatusHeader_Echo("Incorrect number of welders." + "\n" +
                                                  "Format to modify number of welders:" + "\n" +
                                                  "weldersN -> where N is any number WITHOUT decimal.");
                }
                else
                {
                    status.ClearMessages();
                    status.WriteStatusHeader_Echo("Number of welders to activate changed to " + weldersToActivate.ToString());
                    dBlocks.UpdateNumberOfWelders();
                    dBlocks.Reset();
                    status.DisplayAll();
                }
            }
            else
            {
                dBlocks.AddNewDamagedBlocks();
                dBlocks.RemoveRepairedBlocks();
                status.DisplayAll();
            }
        }
コード例 #11
0
        private void HandleConnectToServer(ConnectToServer payload, PayloadWriter writer)
        {
            uint serverId = payload.ServerId;

            Server server = Program.Servers.Get(serverId);

            if (server == null)
            {
                StatusMsg resultPayload = Payloads.CreatePayload <StatusMsg>();
                resultPayload.Errorcode = 1;
                resultPayload.Errormsg  = "Unknown server";
                resultPayload.TicketId  = payload.TicketId;
                SendReply(writer, resultPayload);
                return;
            }

            byte[] nonce = Crypto.CreateNonce();

            PlayerConnecting resultPayload2 = Payloads.CreatePayload <PlayerConnecting>();

            resultPayload2.Nonce     = nonce;
            resultPayload2.CharId    = Account.Id;
            resultPayload2.Name      = Account.PlayerName;
            resultPayload2.OwnerId   = Account.Id;
            resultPayload2.OwnerName = Account.UserName;
            resultPayload2.GuildId   = 0;
            resultPayload2.GuildName = null;
            resultPayload2.GuildRole = 0;
            resultPayload2.Data      = _nicknameData;
            SendToLobbyConnection(server.ConnectionId, resultPayload2);

            ConnectToServerReply resultPayload3 = Payloads.CreatePayload <ConnectToServerReply>();

            resultPayload3.PermId    = Account.Id;
            resultPayload3.ServerId  = serverId;
            resultPayload3.Ip        = server.Ip;
            resultPayload3.Port      = server.Port;
            resultPayload3.Nonce     = nonce;
            resultPayload3.Errorcode = 0;
            resultPayload3.Errormsg  = null;
            resultPayload3.TicketId  = payload.TicketId;
            SendReply(writer, resultPayload3);
        }
コード例 #12
0
        /// <summary>
        /// it will load when control first time loading
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ucConnectToPort_Load(object sender, EventArgs e)
        {
            try
            {
                ConnectionStatusDelegate = new StatusMsg(StatusUpdate);
                ConnectButtonDelegate    = new EnableControls(DisplayOfConnectButton);
                DisconnectButtonDelegate = new EnableControls(DisplayOfDisconnectButton);
                currentUCDelegate        = new EnableControls(DisplayOfCurrentUC);
                BindPortControlDelegate  = new BindPortControl(BindComPorts);
                MsgBoxDelegate           = new MsgBoxDisplay(ShowMsgBox);
                BindBaudRate();


                DefaultConnectedStatus();
            }
            catch (Exception ex)
            {
                Logger.WriteLog(ex);
            }
        }
コード例 #13
0
        internal async Task showHelper(StatusMsg messageToShow, RoutedEventHandler btnHandler = null)
        {
            t.Interval  = 30000;
            t.AutoReset = true;
            t.Elapsed  += T_Elapsed;
            t.Start();
            BoardHeader.Text  = messageToShow.MsgHeader;
            BoardContent.Text = messageToShow.MsgContent;

            if (messageToShow.ShowBtn) //show button only if needed
            {
                BoardBtn.Visibility = Visibility.Visible;
                BoardBtn.Content    = messageToShow.BtnContent;
                BoardBtn.Click     += btnHandler;
            }
            if (messageToShow.MessageType == eStatusMsgType.PROCESS)//show animation
            {
                ProcessAnimationControl(true);
            }

            Show();
        }
コード例 #14
0
        private void HandleGetUserInfo(GetUserInfo payload, PayloadWriter writer)
        {
            uint accountId = payload.UserId;

            if (accountId != Account.Id)
            {
                StatusMsg resultPayload1 = Payloads.CreatePayload <StatusMsg>();
                resultPayload1.Errorcode = 1;
                resultPayload1.Errormsg  = "Incorrect account";
                resultPayload1.TicketId  = payload.TicketId;
                SendReply(writer, resultPayload1);
                return;
            }

            SendUserInfo resultPayload2 = Payloads.CreatePayload <SendUserInfo>();

            resultPayload2.UserId      = accountId;
            resultPayload2.Name        = Account.UserName;
            resultPayload2.Password    = null;
            resultPayload2.Mail        = Account.Email;
            resultPayload2.Banned      = false;
            resultPayload2.Active      = true;
            resultPayload2.Status      = 2;
            resultPayload2.Data        = Account.UserData;
            resultPayload2.Created     = "2012-04-02 00:00:00+0:00";
            resultPayload2.LastLogin   = "******";
            resultPayload2.TotalLogins = 1;
            resultPayload2.TicketId    = payload.TicketId;
            SendReply(writer, resultPayload2);

            StatusMsg resultPayload3 = Payloads.CreatePayload <StatusMsg>();

            resultPayload3.Errorcode = 0;
            resultPayload3.Errormsg  = null;
            resultPayload3.TicketId  = payload.TicketId;
            SendReply(writer, resultPayload3);
        }
コード例 #15
0
        private void HandleSelectNickname(SelectNickname payload, PayloadWriter writer)
        {
            uint playerId = payload.CharId;

            if (playerId != Account.Id)
            {
                StatusMsg resultPayload1 = Payloads.CreatePayload <StatusMsg>();
                resultPayload1.Errorcode = 1;
                resultPayload1.Errormsg  = "Incorrect account";
                resultPayload1.TicketId  = payload.TicketId;
                SendReply(writer, resultPayload1);
                return;
            }

            SelectNicknameReply resultPayload2 = Payloads.CreatePayload <SelectNicknameReply>();

            resultPayload2.CharId     = Account.Id;
            resultPayload2.Name       = Account.PlayerName;
            resultPayload2.OwnerId    = Account.Id;
            resultPayload2.OwnerName  = Account.UserName;
            resultPayload2.GuildId    = 0;
            resultPayload2.GuildName  = null;
            resultPayload2.GuildRole  = 0;
            resultPayload2.Status     = 1;
            resultPayload2.ServerId   = 0;
            resultPayload2.ServerName = null;
            resultPayload2.Data       = _nicknameData;
            resultPayload2.TicketId   = payload.TicketId;
            SendReply(writer, resultPayload2);

            StatusMsg resultPayload3 = Payloads.CreatePayload <StatusMsg>();

            resultPayload3.Errorcode = 0;
            resultPayload3.Errormsg  = null;
            resultPayload3.TicketId  = payload.TicketId;
            SendReply(writer, resultPayload3);
        }
コード例 #16
0
 private async Task WriteStatus()
 {
     if (Battle.log.Count > 0 && Battle.turn > 0)
     {
         if (StatusMsg == null)
         {
             StatusMsg = await BattleChannel.SendMessageAsync(Battle.log.Aggregate("", (s, l) => s += l + "\n"));
         }
         else
         {
             await StatusMsg.ModifyAsync(c => c.Content = Battle.log.Aggregate("", (s, l) => s += l + "\n"));
         }
     }
     else
     {
         if (StatusMsg == null)
         {
             string msg = Messages.Values
                          .Where(p => p is PlayerFighter)
                          .Aggregate("", (s, v) => s += $"<@{((PlayerFighter)v).avatar.ID}>, ");
             StatusMsg = await BattleChannel.SendMessageAsync($"{msg}get in position!");
         }
     }
 }
コード例 #17
0
        private void HandleConfirmNickname(ConfirmNickname payload, PayloadWriter writer)
        {
            uint accountId = payload.UserId;

            if (accountId != Account.Id)
            {
                StatusMsg resultPayload1 = Payloads.CreatePayload <StatusMsg>();
                resultPayload1.Errorcode = 1;
                resultPayload1.Errormsg  = "Incorrect account";
                resultPayload1.TicketId  = payload.TicketId;
                SendReply(writer, resultPayload1);
                return;
            }

            string mail = payload.Mail;

            if (mail != null)
            {
                Program.Accounts.SetEmail(Database.Connection, accountId, mail);
                Account.Email = mail;
            }

            byte[] nicknameData = payload.Data;
            if (nicknameData != null)
            {
                Program.Accounts.SetUserData(Database.Connection, accountId, nicknameData);
                Account.UserData = nicknameData;
            }

            StatusMsg resultPayload2 = Payloads.CreatePayload <StatusMsg>();

            resultPayload2.Errorcode = 0;
            resultPayload2.Errormsg  = null;
            resultPayload2.TicketId  = payload.TicketId;
            SendReply(writer, resultPayload2);
        }
コード例 #18
0
 public void SendLoginMsg(string username, string password)
 {
     client.Send((short)MsgId.Login, new LoginMsg()
     {
         AccountName = username, AccountPassword = Sha256(password)
     }, (callbackStatus, reader) =>
     {
         if (callbackStatus == CallbackStatus.Ok)
         {
             StatusMsg msg  = reader.ReadMessage <StatusMsg>();
             loginResponse  = msg.Text;
             loginSucessful = true; //This will always be true for prototyping
             Debug.Log(msg.Text);
         }
         if (callbackStatus == CallbackStatus.Error)
         {
             Debug.LogError("Callback Error: Login error");
         }
         if (callbackStatus == CallbackStatus.Timeout)
         {
             Debug.LogError("Callback Error: Login attempt timed out");
         }
     });
 }
コード例 #19
0
 public void DisplayMsg(String Msg)
 {
     // This function displays a message to the status window.
     StatusMsg.AppendText(Msg + "\r\n");
 }
コード例 #20
0
        private void HandleRegisterUser(RegisterUser payload, PayloadWriter writer)
        {
            byte[] loginCipher = payload.Cipher;

            byte[] result = Crypto.HandleUser(loginCipher, _sharedSecret);
            Program.LogDebug($" User: {Serializer.DumpBytes(result)}");

            MemoryStream stream = new MemoryStream(result);
            BinaryReader reader = new BinaryReader(stream);

            bool invalid = false;

            byte[] nameBytes  = null;
            int    nameLength = reader.ReadByte();

            if (nameLength < 32)
            {
                nameBytes = reader.ReadBytes(nameLength);
            }
            else
            {
                invalid = true;
            }

            byte[] passwordBytes = null;
            if (!invalid)
            {
                int passwordLength = reader.ReadByte();
                if (nameLength < 32)
                {
                    passwordBytes = reader.ReadBytes(passwordLength);
                }
                else
                {
                    invalid = true;
                }
            }

            byte[] cdKey = null;
            if (!invalid)
            {
                int keysLength = reader.ReadByte();
                int keyPool    = reader.ReadByte();
                int keyLength  = reader.ReadByte();
                if (keysLength != 1 || keyPool != 1 || keyLength != 16)
                {
                    invalid = true;
                }
                else
                {
                    cdKey = reader.ReadBytes(keyLength);
                }
            }

            if (invalid)
            {
                StatusMsg resultPayload1 = Payloads.CreatePayload <StatusMsg>();
                resultPayload1.Errorcode = 3;
                resultPayload1.Errormsg  = "Encryption failure";
                resultPayload1.TicketId  = payload.TicketId;
                SendReply(writer, resultPayload1);
                return;
            }

            string name = Encoding.ASCII.GetString(nameBytes);

            byte[] password = Crypto.HashPassword(passwordBytes);

            uint id = Program.Accounts.Create(Database.Connection, name, password, cdKey);

            if (id == 0)
            {
                StatusMsg resultPayload1 = Payloads.CreatePayload <StatusMsg>();
                resultPayload1.Errorcode = 1;
                resultPayload1.Errormsg  = "Username already in use";
                resultPayload1.TicketId  = payload.TicketId;
                SendReply(writer, resultPayload1);
                return;
            }

            Account = Program.Accounts.Get(Database.Connection, name);
            if (Account == null)
            {
                StatusMsg resultPayload1 = Payloads.CreatePayload <StatusMsg>();
                resultPayload1.Errorcode = 1;
                resultPayload1.Errormsg  = "Account not created";
                resultPayload1.TicketId  = payload.TicketId;
                SendReply(writer, resultPayload1);
                return;
            }

            byte[] secret = Crypto.HandleSessionKey(Crypto.CreateSecretKey(), _sharedSecret);

            LoginReplyCipher resultPayload2 = Payloads.CreatePayload <LoginReplyCipher>();

            resultPayload2.PermId   = Account.Id;
            resultPayload2.Cipher   = secret;
            resultPayload2.TicketId = payload.TicketId;
            SendReply(writer, resultPayload2);

            Program.Log($"Account created for {name}");
        }
コード例 #21
0
        private void HandleLoginServer(LoginServer payload, PayloadWriter writer)
        {
            byte[] loginCipher = payload.Cipher;

            byte[] result = Crypto.HandleUser(loginCipher, _sharedSecret);
            Program.LogDebug($" User: {Serializer.DumpBytes(result)}");

            MemoryStream stream = new MemoryStream(result);
            BinaryReader reader = new BinaryReader(stream);

            bool invalid = false;

            byte[] nameBytes  = null;
            int    nameLength = reader.ReadByte();

            if (nameLength < 32)
            {
                nameBytes = reader.ReadBytes(nameLength);
            }
            else
            {
                invalid = true;
            }

            byte[] passwordBytes = null;
            if (!invalid)
            {
                int passwordLength = reader.ReadByte();
                if (nameLength < 32)
                {
                    passwordBytes = reader.ReadBytes(passwordLength);
                }
                else
                {
                    invalid = true;
                }
            }

            if (invalid)
            {
                StatusMsg resultPayload1 = Payloads.CreatePayload <StatusMsg>();
                resultPayload1.Errorcode = 3;
                resultPayload1.Errormsg  = "Encryption failure";
                resultPayload1.TicketId  = payload.TicketId;
                SendReply(writer, resultPayload1);
                return;
            }

            string name = Encoding.ASCII.GetString(nameBytes);

            byte[] password = Crypto.HashPassword(passwordBytes);

            Account = Program.Accounts.Get(Database.Connection, name);
            if (Account == null)
            {
                StatusMsg resultPayload1 = Payloads.CreatePayload <StatusMsg>();
                resultPayload1.Errorcode = 1;
                resultPayload1.Errormsg  = "Account not found";
                resultPayload1.TicketId  = payload.TicketId;
                SendReply(writer, resultPayload1);
                return;
            }

            if (!Serializer.CompareArrays(password, Account.Password))
            {
                StatusMsg resultPayload1 = Payloads.CreatePayload <StatusMsg>();
                resultPayload1.Errorcode = 1;
                resultPayload1.Errormsg  = "Wrong password";
                resultPayload1.TicketId  = payload.TicketId;
                SendReply(writer, resultPayload1);
                return;
            }

            byte[] secret = Crypto.HandleSessionKey(Crypto.CreateSecretKey(), _sharedSecret);

            LoginReplyCipher resultPayload = Payloads.CreatePayload <LoginReplyCipher>();

            resultPayload.PermId   = Account.Id;
            resultPayload.Cipher   = secret;
            resultPayload.TicketId = payload.TicketId;
            SendReply(writer, resultPayload);

            Program.Log($"Server logged in for user {name}");
        }