Commit
This commit is contained in:
129
pwa/electron/main.js
Normal file
129
pwa/electron/main.js
Normal file
@@ -0,0 +1,129 @@
|
||||
const { app, BrowserWindow, ipcMain } = require('electron')
|
||||
const path = require('path')
|
||||
let steamworks = null
|
||||
let steamInitialized = false
|
||||
|
||||
// Try to initialize Steam
|
||||
function initializeSteam() {
|
||||
try {
|
||||
// Only try to load steamworks if steam_appid.txt exists
|
||||
const fs = require('fs')
|
||||
const steamAppIdPath = path.join(__dirname, '../public/steam_appid.txt')
|
||||
|
||||
if (fs.existsSync(steamAppIdPath)) {
|
||||
steamworks = require('steamworks.js')
|
||||
const client = steamworks.init(480) // Test App ID - replace with your Steam App ID
|
||||
steamInitialized = true
|
||||
console.log('✅ Steam initialized successfully')
|
||||
console.log('Steam User:', client.localplayer.getName())
|
||||
console.log('Steam ID:', client.localplayer.getSteamId().steamId64)
|
||||
return client
|
||||
} else {
|
||||
console.log('ℹ️ steam_appid.txt not found, running without Steam')
|
||||
return null
|
||||
}
|
||||
} catch (error) {
|
||||
console.log('ℹ️ Steam not available:', error.message)
|
||||
steamInitialized = false
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
const steamClient = initializeSteam()
|
||||
|
||||
function createWindow() {
|
||||
const win = new BrowserWindow({
|
||||
width: 1200,
|
||||
height: 800,
|
||||
minWidth: 800,
|
||||
minHeight: 600,
|
||||
webPreferences: {
|
||||
nodeIntegration: false,
|
||||
contextIsolation: true,
|
||||
preload: path.join(__dirname, 'preload.js')
|
||||
},
|
||||
icon: path.join(__dirname, 'icons/icon.png'),
|
||||
title: 'Echoes of the Ash'
|
||||
})
|
||||
|
||||
// In production, load the built files
|
||||
if (app.isPackaged) {
|
||||
win.loadFile(path.join(__dirname, '../dist/index.html'))
|
||||
} else {
|
||||
// In development, load from dev server
|
||||
win.loadURL('http://localhost:5173')
|
||||
win.webContents.openDevTools()
|
||||
}
|
||||
|
||||
// Handle window close
|
||||
win.on('closed', () => {
|
||||
if (steamClient) {
|
||||
steamworks.runCallbacks()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// IPC Handlers
|
||||
ipcMain.handle('get-steam-auth', async () => {
|
||||
if (steamInitialized && steamClient) {
|
||||
try {
|
||||
const player = steamClient.localplayer
|
||||
return {
|
||||
available: true,
|
||||
steamId: player.getSteamId().steamId64,
|
||||
steamName: player.getName()
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error getting Steam auth:', error)
|
||||
return { available: false }
|
||||
}
|
||||
}
|
||||
return { available: false }
|
||||
})
|
||||
|
||||
ipcMain.handle('is-steam-available', async () => {
|
||||
return steamInitialized
|
||||
})
|
||||
|
||||
ipcMain.handle('get-platform', async () => {
|
||||
return process.platform
|
||||
})
|
||||
|
||||
// App lifecycle
|
||||
app.whenReady().then(() => {
|
||||
createWindow()
|
||||
|
||||
// Run Steam callbacks periodically if Steam is initialized
|
||||
if (steamInitialized && steamClient) {
|
||||
setInterval(() => {
|
||||
try {
|
||||
steamworks.runCallbacks()
|
||||
} catch (error) {
|
||||
console.error('Error running Steam callbacks:', error)
|
||||
}
|
||||
}, 1000)
|
||||
}
|
||||
})
|
||||
|
||||
app.on('window-all-closed', () => {
|
||||
if (process.platform !== 'darwin') {
|
||||
app.quit()
|
||||
}
|
||||
})
|
||||
|
||||
app.on('activate', () => {
|
||||
if (BrowserWindow.getAllWindows().length === 0) {
|
||||
createWindow()
|
||||
}
|
||||
})
|
||||
|
||||
// Cleanup on quit
|
||||
app.on('before-quit', () => {
|
||||
if (steamClient) {
|
||||
try {
|
||||
steamworks.runCallbacks()
|
||||
} catch (error) {
|
||||
console.error('Error during Steam cleanup:', error)
|
||||
}
|
||||
}
|
||||
})
|
||||
17
pwa/electron/preload.js
Normal file
17
pwa/electron/preload.js
Normal file
@@ -0,0 +1,17 @@
|
||||
const { contextBridge, ipcRenderer } = require('electron')
|
||||
|
||||
// Expose protected methods that allow the renderer process to use
|
||||
// ipcRenderer without exposing the entire object
|
||||
contextBridge.exposeInMainWorld('electronAPI', {
|
||||
// Get Steam authentication data
|
||||
getSteamAuth: () => ipcRenderer.invoke('get-steam-auth'),
|
||||
|
||||
// Check if Steam is available
|
||||
isSteamAvailable: () => ipcRenderer.invoke('is-steam-available'),
|
||||
|
||||
// Get platform info
|
||||
getPlatform: () => ipcRenderer.invoke('get-platform'),
|
||||
|
||||
// Flag to indicate we're running in Electron
|
||||
isElectron: true
|
||||
})
|
||||
Reference in New Issue
Block a user