Dlang,Socket,Chat Server
sarahjohn
sarahjohn.s388 at gmail.com
Thu Mar 15 06:52:28 UTC 2018
I want to write a chat server. Using the programming language D.
(Dlang) It is desirable to use OOP.
My example.(Not working)
import std.stdio;
import std.concurrency;
import core.thread;
import std.conv;
import std.socket;
synchronized class DataInfo{
shared this()
{
}
public shared Socket[] sockList;
shared void AddSocket(shared Socket scket)
{
sockList ~= scket;
}
shared(Socket[]) getSockList()
{
return to!(shared Socket[])(sockList);
}
}
void UserLoop(shared DataInfo data,shared(int) id)
{
Socket client;
synchronized(data)
{
client = cast(Socket)(data.sockList[id]);
}
while(true)
{
char[1024] buffer;
int sockCount = 0;
client.receive(buffer);
synchronized(data)
{
sockCount = data.sockList.length;
}
for(int i =0 ; i < sockCount; i++)
{
synchronized(data)
{
auto sk = cast( Socket)(data.sockList[i]);
sk.send("Hello world");
}
}
}
}
int main()
{
ushort port;
port = 4444;
auto listener = new TcpSocket();
assert(listener.isAlive);
listener.blocking = false;
listener.bind(new InternetAddress(port));
listener.listen(10);
writefln("Listening on port %d.", port);
shared(DataInfo) data = new shared(DataInfo);
while(true)
{
int len = 0;
auto client = cast(shared Socket)listener.accept();
synchronized(data)
{
data.AddSocket(client);
len = data.sockList.length;
}
spawn(&UserLoop,data,cast(shared int)len);
}
return 0;
}
How? How to fix the bug? Can I get an example of correct chat
servers? (Only Dlang &
(Hadoop)[https://mindmajix.com/hadoop-training]) Also, can you
give an example of the correct client.
Help me on this!
More information about the Digitalmars-d
mailing list