OSDN Git Service

人数制限を追加
authorh2so5 <h2so5@git.sourceforge.jp>
Sun, 16 Sep 2012 16:47:07 +0000 (01:47 +0900)
committerh2so5 <h2so5@git.sourceforge.jp>
Sun, 16 Sep 2012 16:47:07 +0000 (01:47 +0900)
サーバーのステージ指定のチェックを追加

client/Client.cpp
client/CommandManager.cpp
client/CommandManager.hpp
client/scene/Connect.cpp
client/scene/Connect.hpp

index ce5ad81..3ce2a20 100644 (file)
@@ -63,6 +63,7 @@ Client::Client(const std::string& host,
         iterator_ = resolver_.resolve(query);
     } catch (const std::exception& e) {
         Logger::Error(_T("%s"), unicode::ToTString(e.what()));
+               command_queue_.push(network::FatalConnectionError());
         return;
     }
 
@@ -211,7 +212,9 @@ Client::Client(const std::string& host,
 
 Client::~Client()
 {
-    session_->Close();
+       if (session_) {
+               session_->Close();
+       }
     thread_.join();
     //Close();
 }
index f2e83ee..8212080 100644 (file)
@@ -6,6 +6,7 @@
 #include "CardManager.hpp"
 #include "PlayerManager.hpp"
 #include "AccountManager.hpp"
+#include "ResourceManager.hpp"
 #include "../common/Logger.hpp"
 #include "Client.hpp"
 #include "../common/network/Utils.hpp"
@@ -47,11 +48,22 @@ void CommandManager::Update()
                        }
                                break;
 
+                       case ClientReceiveServerCrowdedError:
+                       {
+                               status_ = STATUS_ERROR_CROWDED;
+                       }
+                       break;
+
                        // サーバーデータ受信
                        case ClientReceiveServerInfo:
                        {
                                network::Utils::Deserialize(command->body(), & stage_);
-                               status_ = STATUS_READY;
+                               const auto& model_list = ResourceManager::GetModelNameList();
+                               if (std::find(model_list.begin(),model_list.end(), stage_) == model_list.end()) {
+                                       status_ = STATUS_ERROR_NOSTAGE;
+                               } else {
+                                       status_ = STATUS_READY;
+                               }
                        }
                        break;
 
@@ -104,6 +116,11 @@ void CommandManager::Update()
                        }
                                break;
 
+                       case FatalConnectionError:
+                       {
+                               status_ = STATUS_ERROR;
+                       }
+
                        default:
                                break;
                        }
index 740e8c9..52cb610 100644 (file)
@@ -20,7 +20,9 @@ class CommandManager {
                        STATUS_STANDBY,
                        STATUS_CONNECTING,
                        STATUS_READY,
-                       STATUS_ERROR
+                       STATUS_ERROR,
+                       STATUS_ERROR_CROWDED,
+                       STATUS_ERROR_NOSTAGE
                };
 
     public:
index dcda38e..8e11660 100644 (file)
@@ -3,6 +3,7 @@
 //
 
 #include "MainLoop.hpp"
+#include "Title.hpp"
 #include "Connect.hpp"
 #include <vector>
 #include <algorithm>
@@ -15,7 +16,8 @@ Connect::Connect(const ManagerAccessorPtr& manager_accesor) :
               card_manager_(manager_accesor->card_manager().lock()),
               account_manager_(manager_accesor->account_manager().lock()),
               config_manager_(manager_accesor->config_manager().lock()),
-                         command_manager_(std::make_shared<CommandManager>(manager_accesor_))
+                         command_manager_(std::make_shared<CommandManager>(manager_accesor_)),
+                         return_flag_(false)
 {
     manager_accesor_->set_command_manager(command_manager_);
 }
@@ -26,6 +28,33 @@ Connect::~Connect()
 
 void Connect::Begin()
 {
+
+    int width, height;
+    GetScreenState(&width, &height, nullptr);
+
+    message_.set_width(400);
+    message_.set_text(_T("\90Ú\91±\92\86..."));
+    message_.set_bgcolor(UIBase::Color(0,0,0,0));
+    message_.set_textcolor(UIBase::Color(0,0,0,255));
+    message_.set_left(40);
+    message_.set_top(40);
+
+    button_label_.set_width(100);
+    button_label_.set_text(_T("\83L\83\83\83\93\83Z\83\8b"));
+    button_label_.set_bgcolor(UIBase::Color(0,0,0,0));
+    button_label_.set_textcolor(UIBase::Color(0,0,0,255));
+    button_label_.set_left(width - button_.width() - 40 + 15);
+    button_label_.set_top(height - button_.height() + 35);
+
+    button_.set_height(32);
+    button_.set_left(width - button_.width() - 40);
+    button_.set_top(height - button_.height() - 40);
+
+    button_.set_on_click([this](){
+        return_flag_ = true;
+    });
+
+
     command_manager_->set_client(
             ClientUniqPtr(
                 new network::Client(
@@ -44,6 +73,27 @@ void Connect::Begin()
 void Connect::Update()
 {
        command_manager_->Update();
+
+       switch (command_manager_->status()) {
+       case CommandManager::STATUS_ERROR:
+               message_.set_text(_T("\83G\83\89\81[\81F\90Ú\91±\82É\8e¸\94s\82µ\82Ü\82µ\82½"));
+               command_manager_->set_client(ClientUniqPtr());
+               break;
+       case CommandManager::STATUS_ERROR_CROWDED:
+               message_.set_text(_T("\83G\83\89\81[\81F\90l\90\94\82ª\91½\82·\82¬\82Ü\82·"));
+               command_manager_->set_client(ClientUniqPtr());
+               break;
+       case CommandManager::STATUS_ERROR_NOSTAGE:
+               message_.set_text(_T("\83G\83\89\81[\81F\83T\81[\83o\81[\82ª\8ew\92è\82·\82é\83X\83e\81[\83W\83\82\83f\83\8b\82ð\8e\9d\82Á\82Ä\82¢\82Ü\82¹\82ñ"));
+               command_manager_->set_client(ClientUniqPtr());
+               break;
+       }
+
+    InputManager input;
+    button_.ProcessInput(&input);
+    button_.Update();
+    button_label_.Update();
+    message_.Update();
 }
 
 void Connect::Draw()
@@ -51,7 +101,10 @@ void Connect::Draw()
     int width, height;
     GetScreenState(&width, &height, nullptr);
     DrawBox(0, 0, width, height, GetColor(157, 212, 187), TRUE);
-
+       
+    message_.Draw();
+    button_.Draw();
+    button_label_.Draw();
 }
 
 void Connect::End()
@@ -63,6 +116,8 @@ BasePtr Connect::NextScene()
     InputManager input;
     if (command_manager_->status() == CommandManager::STATUS_READY) {
         return BasePtr(new scene::MainLoop(manager_accesor_));
+       } else if (return_flag_) {
+               return BasePtr(new scene::Title(manager_accesor_));
     } else {
       return BasePtr();
     }
index 93696ad..7d6dd47 100644 (file)
@@ -6,6 +6,8 @@
 
 #include <memory>
 #include "Base.hpp"
+#include "../ui/UILabel.hpp"
+#include "../ui/UIButton.hpp"
 #include "../ManagerAccessor.hpp"
 
 namespace scene {
@@ -30,6 +32,12 @@ class Connect : public Base {
         AccountManagerPtr account_manager_;
         ConfigManagerPtr config_manager_;
                CommandManagerPtr command_manager_;
+               
+               UILabel message_;
+               UILabel button_label_;
+        UIButton button_;
+
+               bool return_flag_;
 
         BasePtr next_scene_;
 };