예제 #1
0
        /// <summary>
        /// Execute.
        /// </summary>
        /// <param name="args">The arguments.</param>
        /// <param name="model"></param>
        /// <param name="client">The client.</param>
        /// <returns></returns>
        public RecieveInfo Execute(string[] args, IServerModel model, TcpClient client = null)
        {
            this.client = client;
            NetworkStream stream = client.GetStream();
            StreamReader  reader = new StreamReader(stream);
            string        result = SendAndRecieve.RecieveInfo(reader);

            client.GetStream().Flush();

            // the first finished before the other joined
            if (result.Equals("aborted"))
            {
                return(new RecieveInfo("close", false, "close"));
            }
            // if the message is invalid
            else if (!result.Equals("invalid command"))
            {
                // save start and end point
                Maze maze = Maze.FromJSON(result);
                model.CurrentRow      = maze.InitialPos.Row;
                model.CurrentCol      = maze.InitialPos.Col;
                model.OtherCurrentRow = maze.InitialPos.Row;
                model.OtherCurrentCol = maze.InitialPos.Col;
                model.Maze            = maze;
                model.GameName        = maze.Name;

                model.EndRow = maze.GoalPos.Row;
                model.EndCol = maze.GoalPos.Col;

                Game.server = client;
                Game.StartGame(model);
            }
            return(new RecieveInfo(result, true, "start"));
        }
        public ServerController(ISoftwareController softwareController,
                                AbstractViewFactory factory,
                                string machineName,
                                string serverId)
        {
            _softwareController = softwareController;

            _serverView = factory.CreateServerView(this, serverId);

            if (_serverView is ServerTabUserControl serverTabUserControl)
            {
                serverTabUserControl.OnUpdateRate += (sender, args) =>
                {
                    Console.WriteLine(@"The new update rage is {0} millisecond", args.StateUpdateRate);
                    _group.UpdateRate = args.StateUpdateRate;
                }
            }
            ;

            _serverModel = new ServerModel();
            _serverModel.ModelChanged += _serverView.ServerModelChange;


            _machineName = machineName;
            _serverId    = serverId;

            _itemAccessMutex = new Mutex();
            _server          = null;
            _group           = null;
        }
        public RecieveInfo Execute(string[] args, IServerModel model, TcpClient client = null)
        {
            NetworkStream stream = client.GetStream();
            StreamReader  reader = new StreamReader(stream);
            string        result = SendAndRecieve.RecieveInfo(reader);

            client.GetStream().Flush();
            client.GetStream().Close();
            client.Close();
            result = result.Substring(1, result.Length - 2);
            if (result != "")
            {
                List <string> temp = new List <string>();
                List <string> arr  = result.Split(',').ToList();
                foreach (string s in arr)
                {
                    temp.Add(s.Substring(1, s.Length - 2));
                }
                model.GameMultiPlayerList = temp;
            }
            else
            {
                model.GameMultiPlayerList = new List <string>();
            }

            return(new RecieveInfo(result, false, "list"));
        }
        public IDictionary <string, object> Get(IServerModel serverModel)
        {
            var result = new Dictionary <string, object> {
                { "success", true }
            };
            var serverAdminNetworkCredential = _serverAdminNetworkCredentialBuilder.Build();
            var webClient = new ServerQueryWebClient {
                Credentials = serverAdminNetworkCredential
            };

            try
            {
                var serverStatusResponse = webClient.DownloadString(serverModel.WebAdminBaseUrl);
                var serverStatus         = JsonConvert.DeserializeObject <Dictionary <string, object> >(serverStatusResponse);
                foreach (var key in serverStatus.Keys)
                {
                    result.Add(key, serverStatus[key]);
                }
            }
            catch (Exception e)
            {
                result["success"] = false;
            }
            return(result);
        }
        /// <summary>
        /// Execute.
        /// </summary>
        /// <param name="args">The arguments.</param>
        /// <param name="model"></param>
        /// <param name="client">The client.</param>
        /// <returns></returns>
        public RecieveInfo Execute(string[] args, IServerModel model, TcpClient client = null)
        {
            NetworkStream stream = client.GetStream();
            StreamReader  reader = new StreamReader(stream);
            string        result = SendAndRecieve.RecieveInfo(reader);

            client.GetStream().Flush();

            if (!result.Equals("invalid command"))
            {
                // save start and end point
                Maze maze = Maze.FromJSON(result);
                model.CurrentRow      = maze.InitialPos.Row;
                model.CurrentCol      = maze.InitialPos.Col;
                model.OtherCurrentRow = maze.InitialPos.Row;
                model.OtherCurrentCol = maze.InitialPos.Col;
                model.Maze            = maze;
                model.GameName        = maze.Name;

                // update end point
                model.EndRow = maze.GoalPos.Row;
                model.EndCol = maze.GoalPos.Col;
            }
            Game.server = client;
            Game.StartGame(model);
            return(new RecieveInfo(result, true, "join"));
        }
예제 #6
0
        public ServerController(ISoftwareController p_SoftwareController, AbstractViewFactory p_Factory, string p_MachineName, string p_ServerID)
        {
            m_SoftwareController = p_SoftwareController;

            m_ServerModel = new ServerModel();
            m_ServerView  = p_Factory.CreateServerView(this, p_ServerID);
            m_ServerModel.ModelChanged += new ModelChangeEventHandler(m_ServerView.ServerModelChange);

            m_MachineName = p_MachineName;
            m_ServerID    = p_ServerID;

            string[] ID_Spilts = p_ServerID.Split(new char[] { '.' });
            if (ID_Spilts[0] == "Veriteq")
            {
                VeriteqOPCServer = true;
                System.Console.WriteLine("Connect to a Veriteq Server\n");
            }

            m_DescriptionDictionary = new Dictionary <string, string>();
            m_UnitDictionary        = new Dictionary <string, string>();

            m_ItemAccessMutex = new Mutex();
            m_Server          = null;
            m_Group           = null;
        }
예제 #7
0
 /**
  * Constructor
  **/
 public CommandManager(IConfiguration conf)
 {
     configuration = conf;
     commandsQueue = new BlockingCollection <AsyncCommand>();
     client        = new MyClientModel();
     serverModel   = new ServerModel(conf);
     Task.Factory.StartNew(SendingCommands);
 }
예제 #8
0
 public SteersViewModel(IServerModel model)
 {
     this.model             = model;
     model.PropertyChanged +=
         delegate(Object sender, PropertyChangedEventArgs e)
     {
         NotifyPropertyChanged("VM_" + e.PropertyName);
     };
 }
예제 #9
0
 /// <summary>
 /// Execute.
 /// </summary>
 /// <param name="args">The arguments.</param>
 /// <param name="client">The client.</param>
 /// <returns></returns>
 public RecieveInfo Execute(string[] args, IServerModel model, TcpClient client = null)
 {
     /*   NetworkStream stream = client.GetStream();
      * StreamReader reader = new StreamReader(stream);
      * string result = SendAndRecieve.RecieveInfo(reader);
      * client.GetStream().Flush();
      *             client.GetStream().Close();
      *             client.Close();
      */
     return(new RecieveInfo("close", false, "close"));
 }
예제 #10
0
        public int?Get(IServerModel serverModel)
        {
            var result = default(int?);
            var info   = _serverCurrentInfoDictionaryDictionaryGetter.Get(serverModel);

            if (Equals(info["success"], true))
            {
                result = Convert.ToInt32(info["players_online"]);
            }
            return(result);
        }
예제 #11
0
        public ClientModel(string localIP, string serverHost, DesktopViewer.DesktopChangedEventHandler onDesktopChanged)
        {
            _connected = false;
            _id = -1;
            _serverHost = serverHost;
            _ip = localIP;
            _hostname = Dns.GetHostName();
            _commands = new CommandQueue();
            _singletonServer = (IServerModel)Activator.GetObject(typeof(IServerModel), _serverHost);

            _viewer = new DesktopViewer( onDesktopChanged);
        }
예제 #12
0
        IServerCurrentInfo GetServerCurrentInfo(IServerModel serverModel)
        {
            var serverCurrentInfoDictionary = _serverCurrentInfoDictionaryGetter.Get(serverModel);
            var serverCurrentInfo           = _serverCurrentInfoAdapter.Adapt(serverCurrentInfoDictionary);
            var serverPlayers = serverCurrentInfo.Players.ToList();
            var playersToShow = serverPlayers.Where(x => !x.IsBot).ToList();
            var firstBot      = serverPlayers.FirstOrDefault(x => x.IsBot);

            if (firstBot != default(IServerPlayer))
            {
                playersToShow.Add(firstBot);
            }
            var result = new ServerCurrentInfo(serverCurrentInfo.MapName, playersToShow, serverCurrentInfo.ServerName);

            return(result);
        }
예제 #13
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ViewModel"/> class.
        /// </summary>
        /// <param name="model">The model.</param>
        public ViewModel(IServerModel model)
        {
            this.model = model;

            Task connectTask = new Task(() => {
                this.model.ConnectClient();
            });

            connectTask.Start();

            this.model.reciveFromServer += ReciveInfo;
            this.model.updateFromServer += Update;
            this.model.connection       += ReciveInfo;
            this.model.initializeEvent  += InitializeGame;

            model.PropertyChanged +=
                delegate(Object sender, PropertyChangedEventArgs e)
            {
                NotifyPropertyChanged("VM_" + e.PropertyName);
            };
        }
예제 #14
0
        /// <summary>
        /// Plays the specified json result.
        /// </summary>
        /// <param name="jsonResult">The json result.</param>
        /// <param name="model">The model.</param>
        private static void Play(JObject jsonResult, IServerModel model)
        {
            string direction = (string)jsonResult["Direction"];
            Key    key       = GetKeyByString(direction);

            Object[] newRowAndCol = model.GetNewRowAndCol(key, model.OtherCurrentRow, model.OtherCurrentCol);
            int      newRow       = (int)newRowAndCol[0];
            int      newCol       = (int)newRowAndCol[1];

            if (newRow < model.MazeRows && newRow >= 0 && newCol < model.MazeRows &&
                newCol >= 0 && model.Maze[newRow, newCol] != MazeLib.CellType.Wall)
            {
                model.OtherCurrentRow = newRow;
                model.OtherCurrentCol = newCol;

                // other player won
                if (newRow == model.Maze.GoalPos.Row && newCol == model.Maze.GoalPos.Col)
                {
                    model.OtherPlayerWon();
                }
            }
        }
예제 #15
0
        /// <summary>
        /// Starts the game.
        /// </summary>
        public static void StartGame(IServerModel model)
        {
            gameAlive = true;
            new Task(() =>
            {
                // wait for join
                NetworkStream stream = server.GetStream();
                StreamReader reader  = new StreamReader(stream);

                while (gameAlive)
                {
                    string result = SendAndRecieve.RecieveInfo(reader);

                    if (result != "")
                    {
                        JObject jsonResult = JObject.Parse(result);

                        // if it's the end of the game:
                        if ((string)jsonResult[""] == "game closed")
                        {
                            gameAlive = false;
                            model.GameOver();
                            model.InitializeGame();
                        }
                        else
                        {
                            // play one move
                            Play(jsonResult, model);
                        }
                    }
                    else
                    {
                        // model.GameOver();
                        gameAlive = false;
                    }
                }
            }).Start();
        }
예제 #16
0
        public ServerViewModel Adapt(IServerModel server)
        {
            var result = new ServerViewModel(server.ID, server.Name, server.WebAdminBaseUrl);

            return(result);
        }
예제 #17
0
 public void SetModel(IServerModel serverModel)
 {
     this._serverModel = serverModel;
 }
예제 #18
0
 public ServerControl(IServerModel serverModel, IServerView serverView)
 {
     this._serverModel = serverModel;
     this._serverView = serverView;
 }
예제 #19
0
 /// <summary>
 /// Initializes a new instance of the ServerViewModel class.
 /// </summary>
 public ServerViewModel(IEventAggregator eventAggregator, IDataService dataService, IServerModel serverModel)
 {
     _dataService = dataService;
     _serverModel = serverModel;
     _eventAggregator = eventAggregator;
 }
예제 #20
0
 public void InsertData(ServerModel type, IServerModel model)
 {
     Data.Add(new KeyValuePair <ServerModel, IServerModel>(type, model));
 }
예제 #21
0
 public ServerPresenter(IServerView view, IServerModel model)
 {
     _view = view;
     _model = model;
 }
예제 #22
0
 /// <summary>
 /// FlightModel constctor. create with server model and flight plan model.
 /// </summary>
 /// <param name="flightPlanModel"> flight plan maneger </param>
 /// <param name="serverModel"> server manger </param>
 public FlightModel(IFlightPlanModel flightPlanModel, IServerModel serverModel)
 {
     this.flightPlanModel = flightPlanModel;
     this.serverModel     = serverModel;
 }
예제 #23
0
 private static void Present( IServerModel aModel, IServerView aView )
 {
     aModel.EventOccurred += aView.LogEvent;
     aView.AbortRequested += aModel.Abort;
     return;
 }
예제 #24
0
 /// <summary>
 /// Initializes a new instance of the ServerViewModel class.
 /// </summary>
 public ServerViewModel(IEventAggregator eventAggregator, IDataService dataService, IServerModel serverModel)
 {
     _dataService     = dataService;
     _serverModel     = serverModel;
     _eventAggregator = eventAggregator;
 }
예제 #25
0
 /// <summary>
 /// controler constctor. create controler with server manger.
 /// </summary>
 /// <param name="manger"></param>
 public ServersController(IServerModel serverModel)
 {
     this.manger = serverModel;
 }