私はICEスターターです。http://zeroc.comには、チャットの作成方法に関する優れたチュートリアルがあります。チュートリアルをベースとして使用することにしました。そして、私が最初にやろうとしたのは、与えられたc ++実装ではなく、c#でChatRoomクラスを作成することでした。私は自分のc#コードで同じことをしようとしました。C ++でのChatRoomの実装:
// C++
class ChatRoomCallbackAdapter { /* ... */ };
typedef IceUtil::Handle<ChatRoomCallbackAdapter> ChatRoomCallbackAdapterPtr;
class ChatRoom : public IceUtil::Shared
{
public:
ChatRoom(bool trace, const Ice::LoggerPtr& logger);
void reserve(const std::string&);
void unreserve(const std::string&);
void join(const std::string&, const ChatRoomCallbackAdapterPtr&);
void leave(const std::string&);
Ice::Long send(const std::string&, const std::string&);
private:
typedef std::map<std::string, ChatRoomCallbackAdapterPtr> ChatRoomCallbackMap;
ChatRoomCallbackMap _members;
std::set<std::string> _reserved;
IceUtil::Mutex _mutex;
const bool _trace;
const Ice::LoggerPtr _logger;
};
クラスメンバーの実装の一部:
// ...
void ChatRoom::reserve(const string& name)
{
IceUtil::Mutex::Lock sync(_mutex);
if(_reserved.find(name) != _reserved.end() ||
_members.find(name) != _members.end())
{
throw string("The name " + name + " is already in use.");
}
_reserved.insert(name);
}
// ...
私は次に書いていました:
public class ChatRoom : IceUtil
エラーが発生したとき。配布パッケージのIceUtildllがCOMで表示されないため、c#プロジェクトで使用できないことがわかりました。
C++の代わりに何を使用できますか
IceUtil::Handle<T>
私が理解している限り、それはスマートポインターです。C#で指定されているようなサーバーを実装するにはどうすればよいですか?
上記のc++クラスと比較して、c#(ミューテックスについて話している)でも同じでしょうか?
public class ChatRoom
{
// ...
void Reserve(System.String Name)
{
lock(this)
{
// operations
}
}
}
?
ありがとう!