OSDN Git Service

名前が更新されないバグを修正
authorh2so5 <h2so5@git.sourceforge.jp>
Mon, 1 Oct 2012 10:31:14 +0000 (19:31 +0900)
committerh2so5 <h2so5@git.sourceforge.jp>
Mon, 1 Oct 2012 10:31:14 +0000 (19:31 +0900)
トリップ機能を実装
サウンドファイルの位置を変更

14 files changed:
Readme.txt
client/AccountManager.cpp
client/AccountManager.hpp
client/Card.cpp
client/Music.cpp
client/Player.cpp
client/bin/system/plugins/textchat/main.js
client/scene/Option.cpp
client/ui/UIBoard.cpp
common/database/AccountProperty.hpp
common/network/Encrypter.cpp
package.py
server/Account.cpp
server/main.cpp

index 230e97e..dda12f1 100644 (file)
@@ -1,4 +1,4 @@
-Miku Miku Online 0.3.9
+Miku Miku Online 0.3.10
 
 // ******************************** 警告 *********************************** //
 // *** 
@@ -58,6 +58,8 @@ Client.exe を起動してください。
 
 /2d6 - 6面サイコロを2つ振ります。dの前後の数字は任意のものを指定できます。
 
+/trip [パスワード] - トリップを設定します
+
 
 === 操作方法
 * キーボード
index c3d7495..10b1432 100644 (file)
Binary files a/client/AccountManager.cpp and b/client/AccountManager.cpp differ
index 093a549..771bfb1 100644 (file)
@@ -29,6 +29,9 @@ class AccountManager {
         std::string model_name() const;
         void set_model_name(const std::string& name);
 
+        std::string trip_passwd() const;
+        void set_trip_passwd(const std::string& trip_passwd);
+
         uint16_t udp_port() const;
         void set_udp_port(uint16_t port);
 
@@ -42,7 +45,7 @@ class AccountManager {
         std::string private_key_;
 
         std::string name_;
-        std::string trip_;
+        std::string trip_passwd_;
         std::string model_name_;
 
         std::string host_;
index ba330f4..2864ccf 100644 (file)
@@ -392,15 +392,19 @@ Handle<Value> Card::Function_Account_updateTrip(const Arguments& args)
     auto self = static_cast<Card*>(args.Holder()->GetPointerFromInternalField(0));\r
 \r
     if (args.Length() >= 1 &&\r
-            args[0]->IsString() &&\r
-            args[0]->ToString()->Length() > 0) {\r
+            args[0]->IsString()) {\r
 \r
+               auto trip_passwd = std::string(*String::Utf8Value(args[0]->ToString()));\r
         if (auto command_manager = self->manager_accessor_->command_manager().lock()) {\r
-            auto trip = std::string(*String::Utf8Value(args[0]->ToString()));\r
-            command_manager->Write(network::ServerUpdateAccountProperty(TRIP, trip));\r
+            command_manager->Write(network::ServerUpdateAccountProperty(TRIP, trip_passwd));\r
         }\r
+\r
+               if (auto account_manager = self->manager_accessor_->account_manager().lock()) {\r
+                       account_manager->set_trip_passwd(trip_passwd);\r
+               }\r
     }\r
 \r
+\r
     return Undefined();\r
 }\r
 \r
index 9f328b1..ff62e7b 100644 (file)
@@ -29,7 +29,7 @@ void Music::Init()
 
        music_paths_.clear();
 
-       path p("./system/music");
+       path p("./music");
 
        try{
                if (exists(p) && is_directory(p)) {
@@ -51,7 +51,7 @@ void Music::Init()
 
        se_paths_.clear();
 
-       p = "./system/se";
+       p = "./se";
 
        try{
                if (exists(p) && is_directory(p)) {
index b6567dd..60ec212 100644 (file)
@@ -552,9 +552,9 @@ std::string Player::model_name() const
     return model_name_;\r
 }\r
 \r
-void Player::set_model_name(const std::string& trip)\r
+void Player::set_model_name(const std::string& name)\r
 {\r
-    model_name_ = trip;\r
+    model_name_ = name;\r
 }\r
 \r
 std::string Player::current_model_name() const\r
index 5d5eab9..572010b 100644 (file)
@@ -17,11 +17,16 @@ var list;
 // チャットメッセージ受信
 var even_line = false;
 Network.onReceive = function (info, msg) {
+       var trip = ""
+       if (info.player.trip()) {
+               trip = "《" + info.player.trip() + "》"
+       }
+       
     if (msg.body && !msg.private) {
         list.addItem(
                new UI.Label({
                    docking: UI.DOCKING_TOP | UI.DOCKING_LEFT | UI.DOCKING_RIGHT,
-                   text: "[" + info.player.name() + "] " + msg.body,
+                   text: trip + "[" + info.player.name() + "] " + msg.body,
                    bgcolor: ((even_line = !even_line) ? "#AFEEEECC" : "#FFFFFFCC")
                })
            );
@@ -31,7 +36,7 @@ Network.onReceive = function (info, msg) {
         list.addItem(
                        new UI.Label({
                                docking: UI.DOCKING_TOP | UI.DOCKING_LEFT | UI.DOCKING_RIGHT,
-                               text: "[private:" + info.player.name() + "] " + msg.body,
+                               text: trip + "[private:" + info.player.name() + "] " + msg.body,
                        bgcolor: ((even_line = !even_line) ? "#add8e6CC" : "#87ceebCC")
                        })
                )
@@ -122,6 +127,11 @@ InputBox.onEnter = function (text) {
             case "nick":
                 Account.updateName(args.trim());
                 break;
+                
+            case "trip":
+               passwd = args ? args.trim() : ""
+                Account.updateTrip(passwd);
+                break;
 
             // モデルを変更             
             case "model":
index b49a120..4f6f665 100644 (file)
@@ -276,6 +276,12 @@ StatusTab::StatusTab(const ManagerAccessorPtr& manager_accessor) :
                        return unicode::ToTString(account_manager->name());
                }), manager_accessor_));
 
+       items_.push_back(std::make_shared<TextItem>(_LT("option.status.trip"),
+               std::make_shared<std::function<tstring(void)>>(
+               [player_manager](){
+                       return unicode::ToTString(player_manager->GetMyself()->trip());
+               }), manager_accessor_));
+
        items_.push_back(std::make_shared<TextItem>(_LT("option.status.modelname"),
                std::make_shared<std::function<tstring(void)>>(
                [account_manager](){
index 2e8068a..02ba84f 100644 (file)
@@ -201,6 +201,7 @@ void UIBoard::UpdateDrag(InputManager* input, bool resizeable)
     if (drag_offset_rect_.x >= 0) {
         offset_rect_.x= input->GetMouseX() - drag_offset_rect_.x;
         offset_rect_.y= input->GetMouseY() - drag_offset_rect_.y;
+
         input->CancelMouseLeft();
     } else if (drag_resize_offset_rect_.x >= 0) {
         offset_rect_.width= input->GetMouseX() -  drag_resize_offset_rect_.x;
index 89c9996..1f4bc10 100644 (file)
@@ -10,8 +10,9 @@ enum AccountProperty {
     LOGIN =         0x2,
     CHANNEL =       0x3,
     NAME =          0xA3,
-    TRIP =          0xA4,
+//    TRIP =          0xA4,
     MODEL_NAME =    0xA5,
+    TRIP =          0xA6,
     IP_ADDRESS =    0xF0,
     UDP_PORT =      0xF1,
 };
index 13180c3..f4dff4f 100644 (file)
@@ -4,6 +4,7 @@
 \r
 #include <boost/format.hpp>\r
 #include <sha.h>\r
+#include <whrlpool.h>\r
 #include <osrng.h>\r
 #include "Encrypter.hpp"\r
 #include "Utils.hpp"\r
@@ -14,7 +15,7 @@
 \r
 namespace network {\r
 \r
-const int Encrypter::TRIP_LENGTH = 20;\r
+const int Encrypter::TRIP_LENGTH = 12;\r
 \r
 using namespace CryptoPP;\r
 \r
@@ -167,21 +168,32 @@ std::string Encrypter::GetPublicKeyFingerPrint()
 std::string Encrypter::GetHash(const std::string& in)\r
 {\r
     std::unique_ptr<byte[]> outbuf(new byte [64]);\r
-    CryptoPP::SHA512().CalculateDigest(outbuf.get(), (const byte*)in.data(), in.size());\r
+       CryptoPP::Whirlpool().CalculateDigest(outbuf.get(), (const byte*)in.data(), in.size());\r
+    return std::string((char*)outbuf.get(), 64);\r
+}\r
 \r
+std::string Encrypter::GetTripHash(const std::string& in)\r
+{\r
+    std::unique_ptr<byte[]> outbuf(new byte [64]);\r
+       CryptoPP::SHA512().CalculateDigest(outbuf.get(), (const byte*)in.data(), in.size());\r
     return std::string((char*)outbuf.get(), 64);\r
 }\r
 \r
 std::string Encrypter::GetTrip(const std::string& in)\r
 {\r
     static const uint8_t trip_chars[] =\r
-            "abcdefghijklmnopqrstuvwxyz"\r
-            "ABCDEFGHIJKLMNOPQRSTUVWXYZ"\r
-            ".:;@#$%&_()=*{}~+-!?[]()^/";\r
+            "opt0uXE{WZABCcdvi&_gMrsmn9)<"\r
+                       "Q(TU}q5wx:DP3yFKL1Gab>|@=*8[$%"\r
+            "NO6Ye#-!?R4ShHIJV72)f+](jklz/\\";\r
 \r
     int pattern_size = sizeof(trip_chars) - 1;\r
 \r
-    auto buffer = GetTripHash(in).substr(0, TRIP_LENGTH);\r
+       std::string digest = GetTripHash(in);\r
+       for (int i = 0; i < 20; i++) {\r
+               digest = GetTripHash(digest + in) + GetHash(in + digest);\r
+       }\r
+\r
+    auto buffer = digest.substr(0, TRIP_LENGTH);\r
     std::string out;\r
 \r
     for (auto it = buffer.begin(); it != buffer.end(); ++it) {\r
@@ -192,11 +204,6 @@ std::string Encrypter::GetTrip(const std::string& in)
     return out;\r
 }\r
 \r
-std::string Encrypter::GetTripHash(const std::string& in)\r
-{\r
-    return GetHash(in);\r
-}\r
-\r
 bool Encrypter::CheckKeyPair()\r
 {\r
     // 復号化できるかチェック\r
index 9ab973d..f0510d2 100644 (file)
@@ -60,6 +60,9 @@ def make_full_package():
                relative_path = os.path.relpath(absolute_path, bin_path)
                zip.write(absolute_path, relative_path)
                
+       zip.writestr('music/', '')
+       zip.writestr('se/', '')
+               
        zip.close()
        
 def make_server_package():
index 51efb07..7ab180d 100644 (file)
@@ -211,10 +211,11 @@ std::string Account::GetUserTrip(UserID user_id) const
 \r
 void Account::SetUserTrip(UserID user_id, const std::string& trip)\r
 {\r
-    if (trip.size() > 0 && trip.size() <= 64) {\r
-        std::string crypted_trip = network::Encrypter::GetTrip(trip);\r
-        Set(user_id, TRIP, crypted_trip);\r
-    }\r
+    if (trip.size() > 0 && trip.size() <= 256) {\r
+        Set(user_id, TRIP, network::Encrypter::GetTrip(trip));\r
+    } else {\r
+               Set(user_id, TRIP, std::string());\r
+       }\r
 }\r
 \r
 std::string Account::GetUserModelName(UserID user_id) const\r
index 544f682..ddcdaed 100644 (file)
@@ -297,7 +297,7 @@ void server()
                     {\r
                                                std::string value;\r
                                                network::Utils::Deserialize(buffer, &value);\r
-                        account.SetUserName(session->id(), buffer);\r
+                        account.SetUserName(session->id(), value);\r
                     }\r
                     break;\r
                 case TRIP:\r