我是 ICE 初学者。在http://zeroc.com有关于如何创建聊天的很好的教程。我决定以本教程为基础。我尝试做的第一件事是用 c# 编写 ChatRoom 类,而不是给定的 c++ 实现。我试图在我的 c# 代码中做同样的事情。C++ 中的聊天室实现:
// 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
当我遇到错误时。我发现分发包中的 IceUtil dll 不是 COM 可见的,因此我不能在我的 c# 项目中使用它。
我可以用什么代替 c++
IceUtil::Handle<T>
据我了解,它是一个智能指针。我怎样才能实现像 c# 中给出的那样的服务器?
与上面的 c++ 类相比,c#(谈论互斥锁)是否相同:
public class ChatRoom
{
// ...
void Reserve(System.String Name)
{
lock(this)
{
// operations
}
}
}
?
谢谢!