ExitError() 공개 정적인 메소드

Quit the program when an error occurs.
public static ExitError ( ) : void
리턴 void
예제 #1
0
파일: Server.cs 프로젝트: jonocodes/mybox
        /*
         * public static HashSet<Type> GetBackends() {
         *
         * HashSet<Type> result = new HashSet<Type>();
         *
         * var types = Assembly.GetExecutingAssembly().GetTypes().Where(m => m.IsClass && m.GetInterfaces().Contains(typeof(IServerDB)));
         *
         * foreach (var type in types)
         *  result.Add(type);
         *
         * return result;
         * }
         */
        /// <summary>
        /// Set member variables from config file
        /// </summary>
        /// <param name="configFile"></param>
        public static IServerDB LoadConfig(String configFile)
        {
            IServerDB serverDB = null;

            try {
                IniParser iniParser = new IniParser(configFile);

                Port = int.Parse(iniParser.GetSetting("settings", CONFIG_PORT)); // returns NULL when not found ?
                String baseDataDir = iniParser.GetSetting("settings", CONFIG_DIR);
                String serverDbConnectionString = iniParser.GetSetting("settings", CONFIG_DBSTRING);
                Type   dbType = Type.GetType(iniParser.GetSetting("settings", CONFIG_BACKEND));

                serverDB = (IServerDB)Activator.CreateInstance(dbType);
                serverDB.Connect(serverDbConnectionString, baseDataDir);
            } catch (FileNotFoundException e) {
                Console.WriteLine(e.Message);
                Common.ExitError();
            }

            return(serverDB);
        }
예제 #2
0
파일: Server.cs 프로젝트: jonocodes/mybox
        public void SpanCatchupOperation(IntPtr myHandle, String accountId, Signal inputOperation, String arg)
        {
            HashSet <IntPtr> thisMap = multiClientMap[accountId];

            foreach (IntPtr thisHandle in thisMap)
            {
                if (thisHandle == myHandle)
                {
                    continue;
                }

                Console.WriteLine("spanCatchupOperation from " + myHandle + " to " + thisHandle + " (" + inputOperation.ToString() + "," + arg + ")");

                try {
                    clients[thisHandle].SendCatchup(inputOperation, arg);
                }
                catch (Exception e) {
                    Console.WriteLine("Exception in spanCatchupOperation " + e.Message);
                    Common.ExitError();
                }
            }
        }
예제 #3
0
        /// <summary>
        /// Handle input signals from the client
        /// </summary>
        /// <param name="signal"></param>
        private void handleInput(Signal signal)
        {
            Console.WriteLine("Handling input for signal " + signal);

            switch (signal)
            {
            case Signal.c2s:

                MyFile newFile = Common.ReceiveFile(socket, dataDir);

                if (newFile != null)
                {
                    server.serverDB.UpdateFile(User, newFile);
                }

                server.SpanCatchupOperation(handle, User.id, signal, newFile.name);
                break;

            //case Signal.clientWantsToSend:
            //  String relPath = Common.ReceiveString(socket);
            //  long timestamp = Common.ReceiveTimestamp(socket);

            //  sendCommandToClient(Signal.clientWantsToSend_response);

            //  Common.SendString(socket, relPath);

            //  // reply 'yes' if it refers to a file that does not exist or if the times do not match
            //  if (File.Exists(dataDir + relPath) && Common.GetModTime(dataDir + relPath) == timestamp) {
            //    Common.SendString(socket, "no");
            //  }
            //  else {
            //    Common.SendString(socket, "yes");
            //  }
            //  break;

            case Signal.clientWants:
                String relPath = Common.ReceiveString(socket);
                if (File.Exists(dataDir + relPath))
                {
                    outQueue.Enqueue(relPath);
                    processOutQueue();
                }
                break;

            case Signal.deleteOnServer:
                relPath = Common.ReceiveString(socket);

                if (Common.DeleteLocal(dataDir + relPath))
                {
                    server.serverDB.RemoveFile(User, relPath);
                }
//            index.Remove(relPath);  // TODO: check return value

                server.SpanCatchupOperation(handle, User.id, signal, relPath);
                break;

            case Signal.createDirectoryOnServer:
                relPath = Common.ReceiveString(socket);

                if (Common.CreateLocalDirectory(dataDir + relPath))
                {
                    server.serverDB.UpdateFile(User, new MyFile(relPath, 'd', Common.GetModTime(dataDir + relPath)
                                                                , 0, "0"));
                }

                server.SpanCatchupOperation(handle, User.id, signal, relPath);
                break;

            case Signal.requestServerFileList:

                List <List <string> > fileListToSerialize = server.serverDB.GetFileListSerializable(User);

                String jsonOutStringFiles = JsonConvert.SerializeObject(fileListToSerialize);

                Console.WriteLine("sending json file list: " + jsonOutStringFiles);

                try {
                    sendCommandToClient(Signal.requestServerFileList_response);
                    Common.SendString(socket, jsonOutStringFiles);
                }
                catch (Exception e) {
                    Console.WriteLine("Error during " + Signal.requestServerFileList_response + e.Message);
                    Common.ExitError();
                }

                break;

            case Signal.attachaccount:

                String args = Common.ReceiveString(socket);

                Console.WriteLine("received " + args);

                List <string> attachInput = JsonConvert.DeserializeObject <List <string> >(args);

                String userName = attachInput[0];
                String password = attachInput[1];

                Dictionary <string, string> jsonOut = new Dictionary <string, string>();
                jsonOut.Add("serverMyboxVersion", Common.AppVersion);

                if (attachUser(userName, password))
                {
                    jsonOut.Add("status", "success");
                    //jsonOut.Add("quota", Account.quota.ToString());
                    //jsonOut.Add("salt", Account.salt);

                    server.AddToMultiMap(User.id, handle);
                }
                else
                {
                    jsonOut.Add("status", "failed");
                    jsonOut.Add("error", "login invalid");

                    close();
                    // TODO: disconnect the client here
                }

                String jsonOutString = JsonConvert.SerializeObject(jsonOut);

                try {
                    sendCommandToClient(Signal.attachaccount_response);
                    Common.SendString(socket, jsonOutString);
                }
                catch (Exception e) {
                    Console.WriteLine("Error during " + Signal.attachaccount_response + e.Message);
                    Common.ExitError();
                }

                Console.WriteLine("attachaccount_response: " + jsonOutString);

                break;

            default:
                Console.WriteLine("Unknown command");
                break;
            }
        }