반응형
어쩌다 보니.. HTA로 별걸 다 하게 되었다.
웹서버가 있으면 좋겠지만, 없는 상황에서 비스끄무리 하게 할 수 없을까란
생각에서 출발해서 만든거다.
아이디어는 간단하다.
어차피 서버에서 일부 정보를 읽고 쓰고 하기만 하면 되니까
네트워크 드라이브를 이용해서 뭔가 수작을 부려 보았다.
사실 네트워크 프로그래밍이 아니다 보니까 훨씬 더 간단하게 만들 수 있다.
좌측에 채팅 내용이 표기되고 우측에 파일 업로드/다운로드 목록을 볼 수 있다.
[NetworkDriveChat.hta]
<html>
<meta charset="euc-kr">
<head>
<title>NetworkDrive Chat</title>
<HTA:APPLICATION
ID="강멍멍이"
APPLICATIONNAME="NetworkDrive Chat"
SCROLL="No"
SINGLEINSTANCE="yes"
WINDOWSTATE="normal"
/>
<style>
BODY {
font-size:9pt;
font-family:돋움체;
}
TABLE, TR, TD {
font-size:8pt;
border:1px solid black;
border-collapse:collapse;
padding-left=3px;
padding-right=3px;
}
.hide {
opacity : 0;
transition: opacity 1s linear;
-webkit-transition: opacity 1s linear;
}
</style>
<script language="VBScript">
Dim timerID, interval, timerOff, timerOffTime, hearbeatInterval
Dim homeDir, chatListName, fileListName
Sub Window_OnLoad
window.resizeTo 950, 600
window.moveTo 750, 250
homeDir = "\\127.0.0.1\멍멍\CHAT\"
chatListName = homeDir & "CHAT.dat"
fileListName = homeDir & "FILE.dat"
interval = 3000 '3초 단위
timerOff = 0
timerOffTime = 15 * 3 '3분 휴면시 자동갱신 중지
hearbeatInterval = 15 * 30 '30분 뒤에 새로운거 있나 체크
Call readFile
End Sub
Sub readFile
timerOff = timerOff + 1
IF timerOff > timerOffTime THEN '휴면
chatViewDiv.style.backgroundColor = "eeeeee"
fileViewDiv.style.backgroundColor = "eeeeee"
'window.clearTimeOut(timerID)
IF timerOff > hearbeatInterval THEN '가끔씩 혹시나 갱신된게 있나 체크
timerOff = 0
END IF
ELSE
chatViewDiv.style.backgroundColor = "fff6ec"
fileViewDiv.style.backgroundColor = "ffeeea"
On Error Resume Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
'채팅 목록
If objFSO.FileExists(chatListName) Then
Set objFileR = objFSO.OpenTextFile(chatListName, 1)
chatFull = ""
Do Until objFileR.AtEndOfStream
curLine = objFileR.ReadLine
IF chatFull = "" THEN
chatFull = curLine
ELSE
chatFull = chatFull & "<br>" & curLine
END IF
Loop
chatViewDiv.innerHTML = chatFull
objFileR.close
End IF
Set element = document.getElementById("chatViewDiv")
element.scrollTop = element.scrollHeight
'파일 목록
If objFSO.FileExists(fileListName) Then
Set objFileR = objFSO.OpenTextFile(fileListName, 1)
fileList = ""
Do Until objFileR.AtEndOfStream
curLine = objFileR.ReadLine
convLine = "<a href=""file:///" & homeDir & "FILE\" & curLine & """>" & curLine & "</a>"
convLine = convLine & " <button style=""font-size:8pt;width=14%;height=14pt"" onClick=""deleteFile('" & curLine & "')"">삭제</button>"
IF fileList = "" THEN
fileList = convLine
ELSE
fileList = fileList & "<br><br>" & convLine
END IF
Loop
fileViewDiv.innerHTML = fileList
objFileR.close
End IF
Set element = document.getElementById("fileViewDiv")
element.scrollTop = element.scrollHeight
END IF
window.clearTimeOut(timerID)
timerID = window.setTimeOut("readFile", interval)
End Sub
Sub sendChat
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFileW = objFSO.OpenTextFile(chatListName, 8) 'APPEND
objFileW.WriteLine inpName.value & " : " & inpChat.value
objFileW.close
inpChat.value = ""
IF timerOff >= timerOffTime THEN
timerOff = 0
Call readFile
END IF
timerOff = 0
End Sub
Sub enterChat
IF window.event.Keycode = 13 THEN
sendChat
END IF
End Sub
Sub chkSelectChange
timerOff = 0
IF ( fileForm.seletedFile.value <> "" ) THEN
Set objFSO = CreateObject("Scripting.FileSystemObject")
fullPathArr = Split(fileForm.seletedFile.value, "\")
fileNameIdx = UBound(fullPathArr)
If objFSO.FileExists(homeDir & "\FILE\" & fullPathArr(fileNameIdx)) Then
MsgBox "동일한 파일이 존재 합니다!", 0, "멍멍"
window.fileForm.reset()
Exit Sub
End If
objFSO.CopyFile fileForm.seletedFile.value, homeDir & "\FILE\"
Set objFileW = objFSO.OpenTextFile(fileListName, 8) 'APPEND
objFileW.WriteLine fullPathArr(fileNameIdx)
objFileW.close
MsgBox "업로드 되었습니다!", 0, "멍멍"
window.fileForm.reset()
END IF
End Sub
Sub deleteFile(getFileName)
result = MsgBox (getFileName & " 파일을 삭제하시겠습니까?", vbYesNo, "멍멍")
IF result <> vbYes THEN
MsgBox "삭제를 취소 합니다.", 0, "멍멍"
Exit Sub
END IF
'파일 삭제
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.deleteFile homeDir & "\FILE\" & getFileName
'목록 갱신
If objFSO.FileExists(fileListName) Then
Set objFileR = objFSO.OpenTextFile(fileListName, 1)
fileList = ""
Do Until objFileR.AtEndOfStream
curLine = objFileR.ReadLine
IF fileList = "" THEN
fileList = curLine
ELSE
fileList = fileList & vbCrLf & curLine
END IF
Loop
objFileR.close
Set objFileW = objFSO.OpenTextFile(fileListName, 2) 'WRITE
arrFileList = Split(fileList, vbCrLf)
For Each fileName in arrFileList
'삭제한거는 빼고 목록 재작성
IF fileName <> getFileName THEN
objFileW.WriteLine fileName
END IF
Next
objFileW.close
MsgBox "삭제 되었습니다!", 0, "멍멍"
End IF
End Sub
</script>
</head>
<body>
<div id="chatViewDiv" style="width:70%;height:93%;float:left;margin-top:8px;margin-right:8px;padding-top:5px;padding-left:5px;overflow:auto;line-height:1.4;background-color:fff6ec"></div>
<div id="fileViewDiv" style="width:29%;height:83%;float:left;margin-top:8px;padding-top:3px;padding-left:5px;overflow:auto;background-color:ffeeea"></div>
<form id="fileForm"><input id="seletedFile" type="file" onChange="chkSelectChange" style="width=100%"></form>
<div id="chatInpDiv" onKeyDown="enterChat" style="width:100%;height:12%;float:left;padding-top:1px;overflow:auto;">
<input id="inpName" value="멍멍" style="width:12%">
<input id="inpChat" style="width:87%">
</div>
</body>
</html>
반응형
댓글