#------------------------------------------------------------------------------- # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. #------------------------------------------------------------------------------- fs = require 'fs' path = require 'path' _ = require 'underscore' nopt = require 'nopt' utils = require './utils' weinre = require './weinre' optionDefaults = httpPort: 8080 boundHost: 'localhost' verbose: false debug: false readTimeout: 5 #------------------------------------------------------------------------------- exports.run = -> knownOpts = httpPort: Number boundHost: String verbose: Boolean debug: Boolean readTimeout: Number deathTimeout: Number help: Boolean shortHands = '?': ['--help'] 'h': ['--help'] nopt.invalidHandler = printNoptError parsedOpts = nopt(knownOpts, shortHands, process.argv, 2) #---- printHelp() if parsedOpts.help args = parsedOpts.argv.remain printHelp() if args.length != 0 #---- delete parsedOpts.argv opts = _.extend {}, optionDefaults, getDotWeinreServerProperties(), parsedOpts if !opts.deathTimeout? opts.deathTimeout = 3 * opts.readTimeout utils.setOptions opts weinre.run opts #------------------------------------------------------------------------------- printNoptError = (key, val, types) -> utils.exit "error with option '#{key}', value '#{val}'" #------------------------------------------------------------------------------- printHelp = () -> version = weinre.getVersion() console.error """ usage: #{utils.Program} [options] version: #{version} options: --httpPort port to run the http server on default: #{optionDefaults.httpPort} --boundHost ip address to bind the server to default: #{optionDefaults.boundHost} --verbose print more diagnostics default: #{optionDefaults.verbose} --debug print even more diagnostics default: #{optionDefaults.debug} --readTimeout seconds to wait for a client message default: #{optionDefaults.readTimeout} --deathTimeout seconds to wait to kill client default: 3*readTimeout --boundHost can be an ip address, hostname, or -all-, where -all- means binding to all ip address on the current machine' for more info see: http://people.apache.org/~pmuellr/weinre/ """ process.exit() #------------------------------------------------------------------------------- getDotWeinreServerProperties = () -> properties = {} fileName = replaceTilde '~/.weinre/server.properties' return properties if !utils.fileExistsSync(fileName) contents = fs.readFileSync(fileName, 'utf8') lines = contents.split('\n') for line in lines line = line.replace(/#.*/,'') match = line.match /\s*(\w+)\s*:\s*(.+)\s*/ continue if !match key = utils.trim match[1] val = utils.trim match[2] properties[key] = val properties #------------------------------------------------------------------------------- replaceTilde = (fileName) -> fileName.replace('~', getTildeReplacement()) #------------------------------------------------------------------------------- getTildeReplacement = () -> process.env["HOME"] || process.env["USERPROFILE"] || '.'