Advertisement
Guest User

intrologin.py

a guest
Apr 25th, 2019
589
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 33.27 KB | None | 0 0
  1. import dbg
  2. import app
  3. import net
  4. import ui
  5. import ime
  6. import snd
  7. import wndMgr
  8. import musicInfo
  9. import serverInfo
  10. import systemSetting
  11. import ServerStateChecker
  12. import localeInfo
  13. import constInfo
  14. import uiCommon
  15. import time
  16. import serverCommandParser
  17. import ime
  18. import uiScriptLocale
  19.  
  20. import introSelect
  21.  
  22. # scroll save login
  23. import random
  24. import string
  25. import uiSelectCredentials
  26. import base64
  27. import _winreg
  28. import os
  29.  
  30. LOGIN_DELAY_SEC = 0.0
  31. SKIP_LOGIN_PHASE = False
  32. SKIP_LOGIN_PHASE_SUPPORT_CHANNEL = False
  33. FULL_BACK_IMAGE = False
  34. VIRTUAL_KEYBOARD_NUM_KEYS = 46
  35. VIRTUAL_KEYBOARD_RAND_KEY = True
  36.  
  37. def Suffle(src):
  38.     if VIRTUAL_KEYBOARD_RAND_KEY:
  39.         items = [item for item in src]
  40.  
  41.         itemCount = len(items)
  42.         for oldPos in xrange(itemCount):
  43.             newPos = app.GetRandom(0, itemCount-1)
  44.             items[newPos], items[oldPos] = items[oldPos], items[newPos]
  45.  
  46.         return "".join(items)
  47.     else:
  48.         return src
  49.  
  50. def IsFullBackImage():
  51.     global FULL_BACK_IMAGE
  52.     return FULL_BACK_IMAGE
  53.  
  54. def IsLoginDelay():
  55.     global LOGIN_DELAY_SEC
  56.     if LOGIN_DELAY_SEC > 0.0:
  57.         return True
  58.     else:
  59.         return False
  60.  
  61. def GetLoginDelay():
  62.     global LOGIN_DELAY_SEC
  63.     return LOGIN_DELAY_SEC
  64.  
  65.  
  66. class ConnectingDialog(ui.ScriptWindow):
  67.     def __init__(self):
  68.         ui.ScriptWindow.__init__(self)
  69.         self.__LoadDialog()
  70.         self.eventTimeOver = lambda *arg: None
  71.         self.eventExit = lambda *arg: None
  72.  
  73.     def __del__(self):
  74.         ui.ScriptWindow.__del__(self)
  75.  
  76.     def __LoadDialog(self):
  77.         try:
  78.             PythonScriptLoader = ui.PythonScriptLoader()
  79.             PythonScriptLoader.LoadScriptFile(self, "ConnectingDialog.py")
  80.  
  81.             self.board = self.GetChild("board")
  82.             self.message = self.GetChild("message")
  83.             self.countdownMessage = self.GetChild("countdown_message")
  84.  
  85.         except:
  86.             import exception
  87.             exception.Abort("ConnectingDialog.LoadDialog.BindObject")
  88.  
  89.     def Open(self, waitTime):
  90.         curTime = time.clock()
  91.         self.endTime = curTime + waitTime
  92.  
  93.         self.Lock()
  94.         self.SetCenterPosition()
  95.         self.SetTop()
  96.         self.Show()
  97.  
  98.     def Close(self):
  99.         self.Unlock()
  100.         self.Hide()
  101.  
  102.     def Destroy(self):
  103.         self.Hide()
  104.         self.ClearDictionary()
  105.  
  106.     def SetText(self, text):
  107.         self.message.SetText(text)
  108.  
  109.     def SetCountDownMessage(self, waitTime):
  110.         self.countdownMessage.SetText("%.0f%s" % (waitTime, localeInfo.SECOND))
  111.  
  112.     def SAFE_SetTimeOverEvent(self, event):
  113.         self.eventTimeOver = ui.__mem_func__(event)
  114.  
  115.     def SAFE_SetExitEvent(self, event):
  116.         self.eventExit = ui.__mem_func__(event)
  117.  
  118.     def OnUpdate(self):
  119.         lastTime = max(0, self.endTime - time.clock())
  120.         if 0 == lastTime:
  121.             self.Close()
  122.             self.eventTimeOver()
  123.         else:
  124.             self.SetCountDownMessage(self.endTime - time.clock())
  125.  
  126.     def OnPressExitKey(self):
  127.         #self.eventExit()
  128.         return True
  129.  
  130.  
  131. class LoginWindow(ui.ScriptWindow):
  132.     def __init__(self, stream):
  133.         #print "NEW LOGIN WINDOW  ----------------------------------------------------------------------------"
  134.         ui.ScriptWindow.__init__(self)
  135.         net.SetPhaseWindow(net.PHASE_WINDOW_LOGIN, self)
  136.         net.SetAccountConnectorHandler(self)
  137.  
  138.         self.lastLoginTime = 0
  139.         self.inputDialog = None
  140.         self.connectingDialog = None
  141.         self.stream=stream
  142.         self.isNowCountDown=False
  143.         self.isStartError=False
  144.  
  145.         self.xServerBoard = 0
  146.         self.yServerBoard = 0
  147.  
  148.         self.loadingImage = None
  149.  
  150.         self.virtualKeyboard = None
  151.         self.virtualKeyboardMode = "ALPHABET"
  152.         self.virtualKeyboardIsUpper = False
  153.            
  154.     def __del__(self):
  155.         net.ClearPhaseWindow(net.PHASE_WINDOW_LOGIN, self)
  156.         net.SetAccountConnectorHandler(0)
  157.         ui.ScriptWindow.__del__(self)
  158.         #print "---------------------------------------------------------------------------- DELETE LOGIN WINDOW"
  159.  
  160.     def Open(self):
  161.         introSelect.displayed = 0
  162.  
  163.         #Just for developers for quick login
  164.         #if constInfo.DEV[0]:
  165.         #   if constInfo.DEV[1]:
  166.         #       self.stream.SetConnectInfo(constInfo.DEV[4], constInfo.DEV[5], constInfo.DEV[4], constInfo.DEV[6])
  167.         #       self.Connect(constInfo.DEV[2], constInfo.DEV[3])
  168.  
  169.         ServerStateChecker.Create(self)
  170.  
  171.         #print "LOGIN WINDOW OPEN ----------------------------------------------------------------------------"
  172.  
  173.         try:
  174.             translation_fix = localeInfo.LOGIN_FAILURE_ALREADY
  175.         except:
  176.             translation_fix = localeInfo.LOGIN_FAILURE_ALREAY
  177.        
  178.         self.loginFailureMsgDict={
  179.             #"DEFAULT" : localeInfo.LOGIN_FAILURE_UNKNOWN,
  180.  
  181.             "ALREADY"   : translation_fix, #localeInfo.LOGIN_FAILURE_ALREADY,
  182.             "NOID"      : localeInfo.LOGIN_FAILURE_NOT_EXIST_ID,
  183.             "WRONGPWD"  : localeInfo.LOGIN_FAILURE_WRONG_PASSWORD,
  184.             "FULL"      : localeInfo.LOGIN_FAILURE_TOO_MANY_USER,
  185.             "SHUTDOWN"  : localeInfo.LOGIN_FAILURE_SHUTDOWN,
  186.             "REPAIR"    : localeInfo.LOGIN_FAILURE_REPAIR_ID,
  187.             "BLOCK"     : localeInfo.LOGIN_FAILURE_BLOCK_ID,
  188.             "BESAMEKEY" : localeInfo.LOGIN_FAILURE_BE_SAME_KEY,
  189.             "NOTAVAIL"  : localeInfo.LOGIN_FAILURE_NOT_AVAIL,
  190.             "NOBILL"    : localeInfo.LOGIN_FAILURE_NOBILL,
  191.             "BLKLOGIN"  : localeInfo.LOGIN_FAILURE_BLOCK_LOGIN,
  192.             "WEBBLK"    : localeInfo.LOGIN_FAILURE_WEB_BLOCK,
  193.         }
  194.  
  195.         self.loginFailureFuncDict = {
  196.             "WRONGPWD"  : self.__DisconnectAndInputPassword,
  197.             "QUIT"      : app.Exit,
  198.         }
  199.  
  200.         self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight())
  201.         self.SetWindowName("LoginWindow")
  202.  
  203.         if not self.__LoadScript("LoginWindow.py"):
  204.             dbg.TraceError("LoginWindow.Open - __LoadScript Error")
  205.             return
  206.  
  207.         self.__LoadLoginInfo("loginInfo.xml")
  208.  
  209.         if app.loggined:
  210.             self.loginFailureFuncDict = {
  211.             "WRONGPWD"  : app.Exit,
  212.             "WRONGMAT"  : app.Exit,
  213.             "QUIT"      : app.Exit,
  214.             }
  215.  
  216.         if musicInfo.loginMusic != "":
  217.             snd.SetMusicVolume(systemSetting.GetMusicVolume())
  218.             snd.FadeInMusic("BGM/"+musicInfo.loginMusic)
  219.  
  220.         snd.SetSoundVolume(systemSetting.GetSoundVolume())
  221.  
  222.         # pevent key "[" "]"
  223.         ime.AddExceptKey(91)
  224.         ime.AddExceptKey(93)
  225.         self.Show()
  226.  
  227.         global SKIP_LOGIN_PHASE
  228.         if SKIP_LOGIN_PHASE:
  229.             if self.isStartError:
  230.                 self.connectBoard.Hide()
  231.                 self.loginBoard.Hide()
  232.                 self.serverBoard.Hide()
  233.                 self.PopupNotifyMessage(localeInfo.LOGIN_CONNECT_FAILURE, self.__ExitGame)
  234.                 return
  235.  
  236.             if self.loginInfo:
  237.                 self.serverBoard.Hide()
  238.             else:
  239.                 self.__RefreshServerList()
  240.                 self.__OpenServerBoard()
  241.         else:
  242.             connectingIP = self.stream.GetConnectAddr()
  243.             if connectingIP:
  244.                 self.__OpenLoginBoard()
  245.                 if IsFullBackImage():
  246.                     self.GetChild("bg").Show()
  247.  
  248.             else:
  249.                 self.__RefreshServerList()
  250.                 self.__OpenServerBoard()
  251.  
  252.         app.ShowCursor()
  253.  
  254.     def Close(self):
  255.    
  256.         if self.connectingDialog:
  257.             self.connectingDialog.Close()
  258.         self.connectingDialog = None
  259.  
  260.         ServerStateChecker.Initialize(self)
  261.  
  262.         #print "---------------------------------------------------------------------------- CLOSE LOGIN WINDOW "
  263.         #
  264.         # selectMusic이 없으면 BGM이 끊기므로 두개 다 체크한다.
  265.         #
  266.         if musicInfo.loginMusic != "" and musicInfo.selectMusic != "":
  267.             snd.FadeOutMusic("BGM/"+musicInfo.loginMusic)
  268.  
  269.         ## NOTE : idEditLine와 pwdEditLine은 이벤트가 서로 연결 되어있어서
  270.         ##        Event를 강제로 초기화 해주어야만 합니다 - [levites]
  271.         self.idEditLine.SetTabEvent(0)
  272.         self.idEditLine.SetReturnEvent(0)
  273.         self.pwdEditLine.SetReturnEvent(0)
  274.         self.pwdEditLine.SetTabEvent(0)
  275.  
  276.         self.connectBoard = None
  277.         self.loginBoard = None
  278.         self.idEditLine = None
  279.         self.pwdEditLine = None
  280.         self.inputDialog = None
  281.         self.connectingDialog = None
  282.         self.loadingImage = None
  283.  
  284.         self.serverBoard = None
  285.         self.serverList = None
  286.         self.channelList = None
  287.  
  288.         self.VIRTUAL_KEY_ALPHABET_LOWERS = None
  289.         self.VIRTUAL_KEY_ALPHABET_UPPERS = None
  290.         self.VIRTUAL_KEY_SYMBOLS = None
  291.         self.VIRTUAL_KEY_NUMBERS = None
  292.  
  293.         # VIRTUAL_KEYBOARD_BUG_FIX
  294.         if self.virtualKeyboard:
  295.             for keyIndex in xrange(0, VIRTUAL_KEYBOARD_NUM_KEYS+1):
  296.                 key = self.GetChild2("key_%d" % keyIndex)
  297.                 if key:
  298.                     key.SetEvent(None)
  299.  
  300.             self.GetChild("key_space").SetEvent(None)
  301.             self.GetChild("key_backspace").SetEvent(None)
  302.             self.GetChild("key_enter").SetEvent(None)
  303.             self.GetChild("key_shift").SetToggleDownEvent(None)
  304.             self.GetChild("key_shift").SetToggleUpEvent(None)
  305.             self.GetChild("key_at").SetToggleDownEvent(None)
  306.             self.GetChild("key_at").SetToggleUpEvent(None)
  307.  
  308.         self.virtualKeyboard = None
  309.  
  310.         self.KillFocus()
  311.         self.Hide()
  312.  
  313.         self.stream.popupWindow.Close()
  314.         self.loginFailureFuncDict=None
  315.         ime.ClearExceptKey()
  316.         app.HideCursor()
  317.  
  318.     def __SaveChannelInfo(self):
  319.         try:
  320.             file=open("channel.inf", "w")
  321.             file.write("%d %d %d" % (self.__GetServerID(), self.__GetChannelID(), self.__GetRegionID()))
  322.         except:
  323.             print "LoginWindow.__SaveChannelInfo - SaveError"
  324.  
  325.     def __LoadChannelInfo(self):
  326.         try:
  327.             file=open("channel.inf")
  328.             lines=file.readlines()
  329.             if len(lines)>0:
  330.                 tokens=lines[0].split()
  331.                 selServerID=int(tokens[0])
  332.                 selChannelID=int(tokens[1])
  333.  
  334.                 if len(tokens) == 3:
  335.                     regionID = int(tokens[2])
  336.  
  337.                 return regionID, selServerID, selChannelID
  338.         except:
  339.             print "LoginWindow.__LoadChannelInfo - OpenError"
  340.             return -1, -1, -1
  341.  
  342.     def __ExitGame(self):
  343.         app.Exit()
  344.  
  345.     def SetIDEditLineFocus(self):
  346.         if self.idEditLine != None:
  347.             self.idEditLine.SetFocus()
  348.  
  349.     def SetPasswordEditLineFocus(self):
  350.         if self.pwdEditLine != None:
  351.             self.pwdEditLine.SetFocus()
  352.  
  353.     def OnEndCountDown(self):
  354.         self.isNowCountDown = False
  355.         self.OnConnectFailure()
  356.  
  357.     def OnConnectFailure(self):
  358.         if self.isNowCountDown:
  359.             return
  360.  
  361.         snd.PlaySound("sound/ui/loginfail.wav")
  362.  
  363.         if self.connectingDialog:
  364.             self.connectingDialog.Close()
  365.         self.connectingDialog = None
  366.  
  367.         if app.loggined:
  368.             self.PopupNotifyMessage(localeInfo.LOGIN_CONNECT_FAILURE, self.__ExitGame)
  369.         else:
  370.             self.PopupNotifyMessage(localeInfo.LOGIN_CONNECT_FAILURE, self.SetPasswordEditLineFocus)
  371.  
  372.     def OnHandShake(self):
  373.         if not IsLoginDelay():
  374.             snd.PlaySound("sound/ui/loginok.wav")
  375.             self.PopupDisplayMessage(localeInfo.LOGIN_CONNECT_SUCCESS)
  376.  
  377.     def OnLoginStart(self):
  378.         if not IsLoginDelay():
  379.             self.PopupDisplayMessage(localeInfo.LOGIN_PROCESSING)
  380.  
  381.     def OnLoginFailure(self, error):
  382.         if self.connectingDialog:
  383.             self.connectingDialog.Close()
  384.         self.connectingDialog = None
  385.  
  386.         try:
  387.             loginFailureMsg = self.loginFailureMsgDict[error]
  388.         except KeyError:
  389.             loginFailureMsg = localeInfo.LOGIN_FAILURE_UNKNOWN  + error
  390.  
  391.         #0000685: [M2EU] 아이디/비밀번호 유추 가능 버그 수정: 무조건 패스워드로 포커스가 가게 만든다
  392.         loginFailureFunc=self.loginFailureFuncDict.get(error, self.SetPasswordEditLineFocus)
  393.  
  394.         if app.loggined:
  395.             self.PopupNotifyMessage(loginFailureMsg, self.__ExitGame)
  396.         else:
  397.             self.PopupNotifyMessage(loginFailureMsg, loginFailureFunc)
  398.  
  399.         snd.PlaySound("sound/ui/loginfail.wav")
  400.  
  401.     def __DisconnectAndInputID(self):
  402.         if self.connectingDialog:
  403.             self.connectingDialog.Close()
  404.         self.connectingDialog = None
  405.  
  406.         self.SetIDEditLineFocus()
  407.         net.Disconnect()
  408.  
  409.     def __DisconnectAndInputPassword(self):
  410.         if self.connectingDialog:
  411.             self.connectingDialog.Close()
  412.         self.connectingDialog = None
  413.  
  414.         self.SetPasswordEditLineFocus()
  415.         net.Disconnect()
  416.  
  417.     def __LoadScript(self, fileName):
  418.         try:
  419.             pyScrLoader = ui.PythonScriptLoader()
  420.             pyScrLoader.LoadScriptFile(self, fileName)
  421.         except:
  422.             import exception
  423.             exception.Abort("LoginWindow.__LoadScript.LoadObject")
  424.  
  425.         try:
  426.             GetObject=self.GetChild
  427.             self.serverBoard            = GetObject("ServerBoard")
  428.             self.serverList             = GetObject("ServerList")
  429.             self.channelList            = GetObject("ChannelList")
  430.             self.serverSelectButton     = GetObject("ServerSelectButton")
  431.             self.serverExitButton       = GetObject("ServerExitButton")
  432.             self.connectBoard           = GetObject("ConnectBoard")
  433.             self.loginBoard             = GetObject("LoginBoard")
  434.             self.idEditLine             = GetObject("ID_EditLine")
  435.             self.pwdEditLine            = GetObject("Password_EditLine")
  436.             self.serverInfo             = GetObject("ConnectName")
  437.             self.selectConnectButton    = GetObject("SelectConnectButton")
  438.             self.loginButton            = GetObject("LoginButton")
  439.             self.loginExitButton        = GetObject("LoginExitButton")
  440.             self.virtualKeyboard        = self.GetChild2("VirtualKeyboard")
  441.  
  442.             if self.virtualKeyboard:
  443.                 self.VIRTUAL_KEY_ALPHABET_UPPERS = Suffle(localeInfo.VIRTUAL_KEY_ALPHABET_UPPERS)
  444.                 self.VIRTUAL_KEY_ALPHABET_LOWERS = "".join([localeInfo.VIRTUAL_KEY_ALPHABET_LOWERS[localeInfo.VIRTUAL_KEY_ALPHABET_UPPERS.index(e)] for e in self.VIRTUAL_KEY_ALPHABET_UPPERS])
  445.                 self.VIRTUAL_KEY_SYMBOLS = Suffle(localeInfo.VIRTUAL_KEY_SYMBOLS)
  446.                 self.VIRTUAL_KEY_NUMBERS = Suffle(localeInfo.VIRTUAL_KEY_NUMBERS)
  447.                 self.__VirtualKeyboard_SetAlphabetMode()
  448.  
  449.                 self.GetChild("key_space").SetEvent(lambda: self.__VirtualKeyboard_PressKey(' '))
  450.                 self.GetChild("key_backspace").SetEvent(lambda: self.__VirtualKeyboard_PressBackspace())
  451.                 self.GetChild("key_enter").SetEvent(lambda: self.__VirtualKeyboard_PressReturn())
  452.                 self.GetChild("key_shift").SetToggleDownEvent(lambda: self.__VirtualKeyboard_SetUpperMode())
  453.                 self.GetChild("key_shift").SetToggleUpEvent(lambda: self.__VirtualKeyboard_SetLowerMode())
  454.                 self.GetChild("key_at").SetToggleDownEvent(lambda: self.__VirtualKeyboard_SetSymbolMode())
  455.                 self.GetChild("key_at").SetToggleUpEvent(lambda: self.__VirtualKeyboard_SetAlphabetMode())
  456.  
  457.         except:
  458.             import exception
  459.             exception.Abort("LoginWindow.__LoadScript.BindObject")
  460.  
  461.         self.selectConnectButton.SetEvent(ui.__mem_func__(self.__OnClickSelectConnectButton))
  462.  
  463.         #self.serverBoard.OnKeyUp = ui.__mem_func__(self.__ServerBoard_OnKeyUp)
  464.         self.xServerBoard, self.yServerBoard = self.serverBoard.GetLocalPosition()
  465.  
  466.         self.serverSelectButton.SetEvent(ui.__mem_func__(self.__OnClickSelectServerButton))
  467.         self.serverExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitButton))
  468.  
  469.         self.loginButton.SetEvent(ui.__mem_func__(self.__OnClickLoginButton))
  470.         self.loginExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitButton))
  471.  
  472.         self.serverList.SetEvent(ui.__mem_func__(self.__OnSelectServer))
  473.  
  474.         self.idEditLine.SetReturnEvent(ui.__mem_func__(self.pwdEditLine.SetFocus))
  475.         self.idEditLine.SetTabEvent(ui.__mem_func__(self.pwdEditLine.SetFocus))
  476.  
  477.         self.pwdEditLine.SetReturnEvent(ui.__mem_func__(self.__OnClickLoginButton))
  478.         self.pwdEditLine.SetTabEvent(ui.__mem_func__(self.idEditLine.SetFocus))
  479.        
  480. # scroll save login
  481.         self.saveLoginButton.SetEvent(ui.__mem_func__(self.__OnClickSaveLoginButton))
  482.         self.loadCredentialButton.SetEvent(ui.__mem_func__(self.__OnClickLoadInfoButton))
  483.         self.loginCredentialButton.SetEvent(ui.__mem_func__(self.__OnClickLoginAutoButton))
  484.  
  485.         if IsFullBackImage():
  486.             self.GetChild("bg").Show()
  487.  
  488.         self.serverInfo.SetText("sv:HQ:0.0.0.0:NNNCatrix") # This is INTENDED! If you change this horrendous thing, fix the dot bug before
  489.                                                            # (This solves it for the english alphabet)
  490.         self.serverInfo.SetText("")                
  491.            
  492.         return 1
  493.  
  494.     def __VirtualKeyboard_SetKeys(self, keyCodes):
  495.         uiDefFontBackup = localeInfo.UI_DEF_FONT
  496.         localeInfo.UI_DEF_FONT = localeInfo.UI_DEF_FONT_LARGE
  497.  
  498.         keyIndex = 1
  499.         for keyCode in keyCodes:
  500.             key = self.GetChild2("key_%d" % keyIndex)
  501.             if key:
  502.                 key.SetEvent(lambda x=keyCode: self.__VirtualKeyboard_PressKey(x))
  503.                 key.SetText(keyCode)
  504.                 key.ButtonText.SetFontColor(0, 0, 0)
  505.                 keyIndex += 1
  506.  
  507.         for keyIndex in xrange(keyIndex, VIRTUAL_KEYBOARD_NUM_KEYS+1):
  508.             key = self.GetChild2("key_%d" % keyIndex)
  509.             if key:
  510.                 key.SetEvent(lambda x=' ': self.__VirtualKeyboard_PressKey(x))
  511.                 key.SetText(' ')
  512.  
  513.         localeInfo.UI_DEF_FONT = uiDefFontBackup
  514.  
  515.     def __VirtualKeyboard_PressKey(self, code):
  516.         ime.PasteString(code)
  517.  
  518.         #if self.virtualKeyboardMode == "ALPHABET" and self.virtualKeyboardIsUpper:
  519.         #   self.__VirtualKeyboard_SetLowerMode()
  520.  
  521.     def __VirtualKeyboard_PressBackspace(self):
  522.         ime.PasteBackspace()
  523.  
  524.     def __VirtualKeyboard_PressReturn(self):
  525.         ime.PasteReturn()
  526.  
  527.     def __VirtualKeyboard_SetUpperMode(self):
  528.         self.virtualKeyboardIsUpper = True
  529.  
  530.         if self.virtualKeyboardMode == "ALPHABET":
  531.             self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_UPPERS)
  532.         elif self.virtualKeyboardMode == "NUMBER":
  533.             self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS)
  534.         else:
  535.             self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS)
  536.  
  537.     def __VirtualKeyboard_SetLowerMode(self):
  538.         self.virtualKeyboardIsUpper = False
  539.  
  540.         if self.virtualKeyboardMode == "ALPHABET":
  541.             self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_LOWERS)
  542.         elif self.virtualKeyboardMode == "NUMBER":
  543.             self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS)
  544.         else:
  545.             self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS)
  546.  
  547.     def __VirtualKeyboard_SetAlphabetMode(self):
  548.         self.virtualKeyboardIsUpper = False
  549.         self.virtualKeyboardMode = "ALPHABET"
  550.         self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_ALPHABET_LOWERS)
  551.  
  552.     def __VirtualKeyboard_SetNumberMode(self):
  553.         self.virtualKeyboardIsUpper = False
  554.         self.virtualKeyboardMode = "NUMBER"
  555.         self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_NUMBERS)
  556.  
  557.     def __VirtualKeyboard_SetSymbolMode(self):
  558.         self.virtualKeyboardIsUpper = False
  559.         self.virtualKeyboardMode = "SYMBOL"
  560.         self.__VirtualKeyboard_SetKeys(self.VIRTUAL_KEY_SYMBOLS)
  561.  
  562.     def Connect(self, id, pwd):
  563.         if constInfo.SEQUENCE_PACKET_ENABLE:
  564.             net.SetPacketSequenceMode()
  565.  
  566.         if IsLoginDelay():
  567.             loginDelay = GetLoginDelay()
  568.             self.connectingDialog = ConnectingDialog()
  569.             self.connectingDialog.Open(loginDelay)
  570.             self.connectingDialog.SAFE_SetTimeOverEvent(self.OnEndCountDown)
  571.             self.connectingDialog.SAFE_SetExitEvent(self.OnPressExitKey)
  572.             self.isNowCountDown = True
  573.  
  574.         else:
  575.             self.stream.popupWindow.Close()
  576.             self.stream.popupWindow.Open(localeInfo.LOGIN_CONNETING, self.SetPasswordEditLineFocus, localeInfo.UI_CANCEL)
  577.  
  578.         self.stream.SetLoginInfo(id, pwd)
  579.         self.stream.Connect()
  580.  
  581.     def __OnClickExitButton(self):
  582.         self.stream.SetPhaseWindow(0)
  583.  
  584.     def __SetServerInfo(self, name):
  585.         net.SetServerInfo(name.strip())
  586.         self.serverInfo.SetText(name)
  587.  
  588.     def __LoadLoginInfo(self, loginInfoFileName):
  589.         try:
  590.             loginInfo={}
  591.             execfile(loginInfoFileName, loginInfo)
  592.         except IOError:
  593.             print(loginInfoFileName, "was not found")
  594.  
  595.         id=loginInfo.get("id", "")
  596.         pwd=loginInfo.get("pwd", "")
  597.         addr=loginInfo.get("addr", "")
  598.         port=loginInfo.get("port", 0)
  599.         account_addr=loginInfo.get("account_addr", addr)
  600.         account_port=loginInfo.get("account_port", port)
  601.  
  602.         locale = loginInfo.get("locale", "")
  603.  
  604.         if addr and port:
  605.             net.SetMarkServer(addr, port)
  606.             net.SetServerInfo(addr+":"+str(port))
  607.             self.serverInfo.SetText("K:"+addr+":"+str(port))
  608.  
  609.         slot=loginInfo.get("slot", 0)
  610.         isAutoLogin=loginInfo.get("auto", 0)
  611.         isAutoLogin=loginInfo.get("autoLogin", 0)
  612.         isAutoSelect=loginInfo.get("autoSelect", 0)
  613.  
  614.         self.stream.SetCharacterSlot(slot)
  615.         self.stream.SetConnectInfo(addr, port, account_addr, account_port)
  616.         self.stream.isAutoLogin=isAutoLogin
  617.         self.stream.isAutoSelect=isAutoSelect
  618.  
  619.         self.id = None
  620.         self.pwd = None
  621.         self.loginnedServer = None
  622.         self.loginnedChannel = None
  623.         app.loggined = False
  624.  
  625.         self.loginInfo = loginInfo
  626.  
  627.         if self.id and self.pwd:
  628.             app.loggined = True
  629.  
  630.         if isAutoLogin:
  631.             self.Connect(id, pwd)
  632.  
  633.         return
  634.  
  635.     def PopupDisplayMessage(self, msg):
  636.         self.stream.popupWindow.Close()
  637.         self.stream.popupWindow.Open(msg)
  638.  
  639.     def PopupNotifyMessage(self, msg, func=0):
  640.         if not func:
  641.             func=self.EmptyFunc
  642.  
  643.         self.stream.popupWindow.Close()
  644.         self.stream.popupWindow.Open(msg, func, localeInfo.UI_OK)
  645.  
  646.     def __OnCloseInputDialog(self):
  647.         if self.inputDialog:
  648.             self.inputDialog.Close()
  649.         self.inputDialog = None
  650.         return True
  651.  
  652.     def OnPressExitKey(self):
  653.         self.stream.popupWindow.Close()
  654.         self.stream.SetPhaseWindow(0)
  655.         return True
  656.  
  657.     def OnExit(self):
  658.         self.stream.popupWindow.Close()
  659.         self.stream.popupWindow.Open(app.Exit, localeInfo.UI_OK)
  660.  
  661.     def OnIMEReturn(self):
  662.         if self.serverBoard.IsShow() and not self.loginBoard.IsShow():
  663.             self.__OnClickSelectServerButton()
  664.                
  665.         elif self.loginBoard.IsShow() and not self.stream.popupWindow.IsShow():
  666.             id = self.idEditLine.GetText()
  667.             pwd = self.pwdEditLine.GetText()
  668.             if len(id) > 0 and len(pwd) > 0:
  669.                 self.Connect(id, pwd)
  670.                    
  671.         return True
  672.                    
  673.     def OnUpdate(self):
  674.         ServerStateChecker.Update()
  675.  
  676.     def EmptyFunc(self):
  677.         pass
  678.  
  679.     #####################################################################################
  680.  
  681. #   def __ServerBoard_OnKeyUp(self, key):
  682. #       if self.serverBoard.IsShow():
  683. #           if app.DIK_RETURN==key:
  684. #               self.__OnClickSelectServerButton()
  685. #       return True
  686.  
  687.     def __GetRegionID(self):
  688.         constInfo.REGION_ID = 0
  689.         return 0
  690.  
  691.     def __GetServerID(self):
  692.         constInfo.SERVER_ID = self.serverList.GetSelectedItem()
  693.         return self.serverList.GetSelectedItem()
  694.  
  695.     def __GetChannelID(self):
  696.         constInfo.CHANNEL_ID = self.channelList.GetSelectedItem()
  697.         return self.channelList.GetSelectedItem()
  698.  
  699.     # SEVER_LIST_BUG_FIX
  700.     def __ServerIDToServerIndex(self, regionID, targetServerID):
  701.         try:
  702.             regionDict = serverInfo.REGION_DICT[regionID]
  703.         except KeyError:
  704.             return -1
  705.  
  706.         retServerIndex = 0
  707.         for eachServerID, regionDataDict in regionDict.items():
  708.             if eachServerID == targetServerID:
  709.                 return retServerIndex
  710.  
  711.             retServerIndex += 1
  712.  
  713.         return -1
  714.  
  715.     def __ChannelIDToChannelIndex(self, channelID):
  716.         return channelID - 1
  717.     # END_OF_SEVER_LIST_BUG_FIX
  718.  
  719.     def __OpenServerBoard(self):
  720.         loadRegionID, loadServerID, loadChannelID = self.__LoadChannelInfo()
  721.         serverIndex = self.__ServerIDToServerIndex(loadRegionID, loadServerID)
  722.         channelIndex = self.__ChannelIDToChannelIndex(loadChannelID)
  723.         self.serverList.SelectItem(serverIndex)
  724.  
  725.         # Random Channel
  726.         self.channelList.SelectItem(app.GetRandom(0, self.channelList.GetItemCount()))
  727.        
  728.         if constInfo.DEV[0]:
  729.             self.serverList.SelectItem(constInfo.DEV[1] - 1)
  730.             self.channelList.SelectItem(constInfo.DEV[2] - 1)
  731.             self.__OnClickSelectServerButton()
  732.            
  733.         ## Show/Hide 코드에 문제가 있어서 임시 - [levites]
  734.         self.serverBoard.SetPosition(self.xServerBoard, self.yServerBoard)
  735.         self.serverBoard.Show()
  736.         self.connectBoard.Hide()
  737.         self.loginBoard.Hide()
  738.  
  739.         if self.virtualKeyboard:
  740.             self.virtualKeyboard.Hide()
  741.  
  742.         if app.loggined and not SKIP_LOGIN_PHASE_SUPPORT_CHANNEL:
  743.             self.serverList.SelectItem(self.loginnedServer-1)
  744.             self.channelList.SelectItem(self.loginnedChannel-1)
  745.             self.__OnClickSelectServerButton()
  746.  
  747.     def __OpenLoginBoard(self):
  748.         self.serverExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitServerButton))
  749.         self.serverExitButton.SetText(localeInfo.UI_CLOSE)
  750.         self.serverBoard.SetPosition(self.xServerBoard, wndMgr.GetScreenHeight())
  751.         self.serverBoard.Hide()
  752.  
  753.         if self.virtualKeyboard:
  754.             self.virtualKeyboard.Show()
  755.  
  756.         if app.loggined:
  757.             self.Connect(self.id, self.pwd)
  758.             self.connectBoard.Hide()
  759.             self.loginBoard.Hide()
  760.         elif not self.stream.isAutoLogin:
  761.             self.connectBoard.Show()
  762.             self.loginBoard.Show()
  763.  
  764.         ## if users have the login infomation, then don't initialize.2005.9 haho
  765.         if self.idEditLine == None:
  766.             self.idEditLine.SetText("")
  767.  
  768.         if self.pwdEditLine == None:
  769.             self.pwdEditLine.SetText("")
  770.  
  771.         self.idEditLine.SetFocus()
  772.         global SKIP_LOGIN_PHASE
  773.         if SKIP_LOGIN_PHASE:
  774.             if not self.loginInfo:
  775.                 self.connectBoard.Hide()
  776.  
  777.         if constInfo.DEV[3]:
  778.             self.idEditLine.SetText(constInfo.DEV[4])
  779.             self.pwdEditLine.SetText(constInfo.DEV[5])
  780.             self.__OnClickLoginButton()            
  781.                
  782.     def __OnSelectRegionGroup(self):
  783.         self.__RefreshServerList()
  784.  
  785.     def __OnSelectSettlementArea(self):
  786.         # SEVER_LIST_BUG_FIX
  787.         regionID = self.__GetRegionID()
  788.         serverID = self.serverListOnRegionBoard.GetSelectedItem()
  789.         serverIndex = self.__ServerIDToServerIndex(regionID, serverID)
  790.         self.serverList.SelectItem(serverIndex)
  791.         # END_OF_SEVER_LIST_BUG_FIX
  792.  
  793.         self.__OnSelectServer()
  794.  
  795.     def __RefreshServerList(self):
  796.         regionID = self.__GetRegionID()
  797.         if not serverInfo.REGION_DICT.has_key(regionID):
  798.             return
  799.  
  800.         self.serverList.ClearItem()
  801.  
  802.         regionDict = serverInfo.REGION_DICT[regionID]
  803.         # SEVER_LIST_BUG_FIX
  804.         visible_index = 1
  805.         for id, regionDataDict in regionDict.items():
  806.             name = regionDataDict.get("name", "noname")
  807.             try:
  808.                 server_id = serverInfo.SERVER_ID_DICT[id]
  809.             except:
  810.                 server_id = visible_index
  811.  
  812.             self.serverList.InsertItem(id, "  %02d. %s" % (int(server_id), name))
  813.             visible_index += 1
  814.  
  815.         # END_OF_SEVER_LIST_BUG_FIX
  816.  
  817.     def __OnSelectServer(self):
  818.         self.__OnCloseInputDialog()
  819.         self.__RequestServerStateList()
  820.         self.__RefreshServerStateList()
  821.  
  822.     def __RequestServerStateList(self):
  823.         regionID = self.__GetRegionID()
  824.         serverID = self.__GetServerID()
  825.  
  826.         try:
  827.             channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
  828.         except:
  829.             print " __RequestServerStateList - serverInfo.REGION_DICT(%d, %d)" % (regionID, serverID)
  830.             return
  831.  
  832.         ServerStateChecker.Initialize();
  833.         for id, channelDataDict in channelDict.items():
  834.             key=channelDataDict["key"]
  835.             ip=channelDataDict["ip"]
  836.             udp_port=channelDataDict["udp_port"]
  837.             ServerStateChecker.AddChannel(key, ip, udp_port)
  838.  
  839.         ServerStateChecker.Request()
  840.  
  841.     def __RefreshServerStateList(self):
  842.         regionID = self.__GetRegionID()
  843.         serverID = self.__GetServerID()
  844.         bakChannelID = self.channelList.GetSelectedItem()
  845.         self.channelList.ClearItem()
  846.  
  847.         try:
  848.             channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
  849.         except:
  850.             print " __RequestServerStateList - serverInfo.REGION_DICT(%d, %d)" % (regionID, serverID)
  851.             return
  852.  
  853.         for channelID, channelDataDict in channelDict.items():
  854.             channelName = channelDataDict["name"]
  855.             channelState = channelDataDict["state"]
  856.             #self.channelList.InsertItem(channelID, "|cFF%s%s %s" % ((serverInfo.STATE_COLOR_DICT[channelState]), channelName, channelState))
  857.             self.channelList.InsertItem(channelID, localeInfo.HexColorAnyText("%s %s" % (channelName, channelState), serverInfo.STATE_COLOR_DICT[channelState]))
  858.  
  859.         self.channelList.SelectItem(bakChannelID-1)
  860.  
  861.     def __GetChannelName(self, regionID, selServerID, selChannelID):
  862.         try:
  863.             return serverInfo.REGION_DICT[regionID][selServerID]["channel"][selChannelID]["name"]
  864.         except KeyError:
  865.             if 9==selChannelID:
  866.                 return localeInfo.CHANNEL_PVP
  867.             else:
  868.                 return localeInfo.CHANNEL_NORMAL % (selChannelID)
  869.  
  870.     def NotifyChannelState(self, addrKey, state):
  871.         try:
  872.             stateName=serverInfo.STATE_DICT[state]
  873.         except:
  874.             stateName=serverInfo.STATE_NONE
  875.  
  876.         #regionID=int(addrKey/1000)
  877.         regionID=self.__GetRegionID()
  878.         #serverID=int(addrKey/10) % 100
  879.         serverID=self.__GetServerID()
  880.         channelID=addrKey%10
  881.  
  882.         try:
  883.             serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["state"] = stateName
  884.             self.__RefreshServerStateList()
  885.         except:
  886.             import exception
  887.             exception.Abort(localeInfo.CHANNEL_NOT_FIND_INFO)
  888.  
  889.     def __OnClickExitServerButton(self):
  890.         print "exit server"
  891.         self.__OnClickExitButton()
  892.  
  893.     def __OnClickSelectRegionButton(self):
  894.         regionID = self.__GetRegionID()
  895.         serverID = self.__GetServerID()
  896.  
  897.         if (not serverInfo.REGION_DICT.has_key(regionID)):
  898.             self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_REGION)
  899.             return
  900.  
  901.         if (not serverInfo.REGION_DICT[regionID].has_key(serverID)):
  902.             self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_SERVER)
  903.             return
  904.  
  905.         self.__SaveChannelInfo()
  906.  
  907.         self.serverExitButton.SetEvent(ui.__mem_func__(self.__OnClickExitServerButton))
  908.         self.serverExitButton.SetText(localeInfo.UI_CLOSE)
  909.  
  910.         self.__RefreshServerList()
  911.         self.__OpenServerBoard()
  912.  
  913.     def __OnClickSelectServerButton(self):
  914.         if IsFullBackImage():
  915.             self.GetChild("bg").Show()
  916.  
  917.         regionID = self.__GetRegionID()
  918.         serverID = self.__GetServerID()
  919.         channelID = self.__GetChannelID()
  920.  
  921.         if (not serverInfo.REGION_DICT.has_key(regionID)):
  922.             self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_REGION)
  923.             return
  924.  
  925.         if (not serverInfo.REGION_DICT[regionID].has_key(serverID)):
  926.             self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_SERVER)
  927.             return
  928.  
  929.         try:
  930.             channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
  931.         except KeyError:
  932.             return
  933.  
  934.         try:
  935.             state = channelDict[channelID]["state"]
  936.         except KeyError:
  937.             self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_CHANNEL)
  938.             return
  939.  
  940.         # 상태가 FULL 과 같으면 진입 금지
  941.         if state == serverInfo.STATE_DICT[3]:
  942.             self.PopupNotifyMessage(localeInfo.CHANNEL_NOTIFY_FULL)
  943.             return
  944.  
  945.         self.__SaveChannelInfo()
  946.  
  947.         try:
  948.             serverName = serverInfo.REGION_DICT[regionID][serverID]["name"]
  949.             channelName = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["name"]
  950.             addrKey = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["key"]
  951.         except:
  952.             print " ERROR __OnClickSelectServerButton(%d, %d, %d)" % (regionID, serverID, channelID)
  953.             serverName = localeInfo.CHANNEL_EMPTY_SERVER
  954.             channelName = localeInfo.CHANNEL_NORMAL % channelID
  955.  
  956.         self.__SetServerInfo("%s, %s " % (serverName, channelName))
  957.  
  958.         try:
  959.             ip = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["ip"]
  960.             tcp_port = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["tcp_port"]
  961.         except:
  962.             import exception
  963.             exception.Abort("LoginWindow.__OnClickSelectServerButton - 서버 선택 실패")
  964.  
  965.         try:
  966.             account_ip = serverInfo.REGION_AUTH_SERVER_DICT[regionID][serverID]["ip"]
  967.             account_port = serverInfo.REGION_AUTH_SERVER_DICT[regionID][serverID]["port"]
  968.         except:
  969.             account_ip = 0
  970.             account_port = 0
  971.  
  972.         try:
  973.             markKey = regionID*1000 + serverID*10
  974.             markAddrValue=serverInfo.MARKADDR_DICT[markKey]
  975.             net.SetMarkServer(markAddrValue["ip"], markAddrValue["tcp_port"])
  976.             app.SetGuildMarkPath(markAddrValue["mark"])
  977.             # GUILD_SYMBOL
  978.             app.SetGuildSymbolPath(markAddrValue["symbol_path"])
  979.             # END_OF_GUILD_SYMBOL
  980.  
  981.         except:
  982.             import exception
  983.             exception.Abort("LoginWindow.__OnClickSelectServerButton - 마크 정보 없음")
  984.  
  985.         self.stream.SetConnectInfo(ip, tcp_port, account_ip, account_port)
  986.         self.__OpenLoginBoard()
  987.  
  988.     def __OnClickSelectConnectButton(self):
  989.         if IsFullBackImage():
  990.             self.GetChild("bg").Show()
  991.  
  992.         self.__RefreshServerList()
  993.         self.__OpenServerBoard()
  994.  
  995.     def __OnClickLoginButton(self):
  996.         id = self.idEditLine.GetText()
  997.         pwd = self.pwdEditLine.GetText()
  998.  
  999.         if len(id)==0:
  1000.             self.PopupNotifyMessage(localeInfo.LOGIN_INPUT_ID, self.SetIDEditLineFocus)
  1001.             return
  1002.  
  1003.         if len(pwd)==0:
  1004.             self.PopupNotifyMessage(localeInfo.LOGIN_INPUT_PASSWORD, self.SetPasswordEditLineFocus)
  1005.             return
  1006.  
  1007.         self.Connect(id, pwd)
  1008.        
  1009. # scroll save login
  1010.     def __OnClickLoginButton(self):
  1011.         id = self.idEditLine.GetText()
  1012.         pwd = self.pwdEditLine.GetText()
  1013.  
  1014.         if len(id)==0:
  1015.             self.PopupNotifyMessage(localeInfo.LOGIN_INPUT_ID, self.SetIDEditLineFocus)
  1016.             return
  1017.  
  1018.         if len(pwd)==0:
  1019.             self.PopupNotifyMessage(localeInfo.LOGIN_INPUT_PASSWORD, self.SetPasswordEditLineFocus)
  1020.             return
  1021.  
  1022.         self.Connect(id, pwd)
  1023.        
  1024.     def set_reg(self, name, value):
  1025.         REG_PATH = r"SOFTWARE\Metin2\Settings"
  1026.         try:
  1027.             _winreg.CreateKey(_winreg.HKEY_CURRENT_USER, REG_PATH)
  1028.             registry_key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, REG_PATH, 0,
  1029.                                            _winreg.KEY_WRITE)
  1030.             _winreg.SetValueEx(registry_key, name, 0, _winreg.REG_SZ, value)
  1031.             _winreg.CloseKey(registry_key)
  1032.             print("WINDOWS REG: Wrote: '{}' into the reg".format(value))
  1033.             return True
  1034.         except WindowsError:
  1035.             print("WINDOWS REG ERROR: Could not write.")
  1036.             return False
  1037.  
  1038.     def get_reg(self, name):
  1039.         REG_PATH = r"SOFTWARE\Metin2\Settings"
  1040.         try:
  1041.             registry_key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, REG_PATH, 0,
  1042.                                            _winreg.KEY_READ)
  1043.             value, regtype = _winreg.QueryValueEx(registry_key, name)
  1044.             _winreg.CloseKey(registry_key)
  1045.             return value
  1046.         except WindowsError:
  1047.             print("WINDOWS REG ERROR: Could not read.")
  1048.             return None
  1049.        
  1050.     def __GenerateRandomWord(self, length):
  1051.         letters = string.ascii_lowercase
  1052.         return ''.join(random.choice(letters) for i in range(length))
  1053.        
  1054.     def __GeneratePassword(self):
  1055.         _pass = self.__GenerateRandomWord(10)
  1056.         self.set_reg('Password',_pass)
  1057.         return _pass
  1058.        
  1059.     def __ReadSavedPassword(self):
  1060.         if (self.get_reg('Password') == None):
  1061.             return self.__GeneratePassword()
  1062.         else:
  1063.             return self.get_reg('Password')    
  1064.  
  1065.     def __OnClickSaveLoginButton(self):
  1066.         id = self.idEditLine.GetText()
  1067.         pwd = self.pwdEditLine.GetText()
  1068.         keypw = self.__ReadSavedPassword()
  1069.         pwd = self.encode(keypw, pwd)
  1070.         if (len(id) == 0 or len(pwd) == 0):
  1071.             self.PopupNotifyMessage("Please type ID and Password.",self.SetIDEditLineFocus)
  1072.             return
  1073.        
  1074.         try:
  1075.             file_object = open("user//credentials", "a")
  1076.         except:
  1077.             file_object = open("user//credentials", "w")       
  1078.         file_object.write("{}:{}\n".format(id,pwd))
  1079.         file_object.close()
  1080.        
  1081.         self.PopupNotifyMessage("Credentials Stored.",self.SetIDEditLineFocus)
  1082.        
  1083.     def __OnClickLoadInfoButton(self):
  1084.         self.accountList = uiSelectCredentials.FileListDialog()
  1085.         self.accountList.Open()
  1086.    
  1087.    
  1088.     def __OnClickLoginAutoButton(self):
  1089.         file_object = open("user//preferred", "r")
  1090.         credentials = file_object.readline()
  1091.         credentials = credentials.split(";")
  1092.         file_object.close()
  1093.         self.Connect("{}".format(credentials[0]), "{}".format(self.decode(self.__ReadSavedPassword(),credentials[1]) ))
  1094.        
  1095.     def encode(self, key, clear):
  1096.         enc = []
  1097.         for i in range(len(clear)):
  1098.             key_c = key[i % len(key)]
  1099.             enc_c = chr((ord(clear[i]) + ord(key_c)) % 256)
  1100.             enc.append(enc_c)
  1101.         return base64.urlsafe_b64encode("".join(enc))
  1102.  
  1103.     def decode(self, key, enc):
  1104.         dec = []
  1105.         enc = base64.urlsafe_b64decode(enc)
  1106.         for i in range(len(enc)):
  1107.             key_c = key[i % len(key)]
  1108.             dec_c = chr((256 + ord(enc[i]) - ord(key_c)) % 256)
  1109.             dec.append(dec_c)
  1110.         return "".join(dec)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement