コード例 #1
0
        public Task ReciveMessageAsync()
        {
            return(Task.Run(() =>
            {
                try
                {
                    while (true)
                    {
                        byte[] buf = new byte[1024];
                        using (var stream = new MemoryStream())
                        {
                            do
                            {
                                int byteRec = client.Receive(buf);
                                stream.Write(buf, 0, byteRec);
                            } while (client.Available > 0);
                            if (stream.Length != 0)
                            {
                                stream.Position = 0;

                                BinaryFormatter formatter = new BinaryFormatter();
                                Message tmp = (Message)formatter.Deserialize(stream);
                                stream.Position = 0;
                                if (tmp.Type == MessageType.UserData)
                                {
                                    info = tmp.username;
                                    Console.WriteLine(tmp.username.username);
                                    GetOtherUsers();
                                }
                                if (tmp.Type == MessageType.Private)
                                {
                                    server.SendPrivateMessage(stream.ToArray(), tmp.receiver);
                                }
                                else
                                {
                                    server.BroadcastMessage(stream.ToArray(), info.id);
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    client.Shutdown(SocketShutdown.Both);
                    client.Close();
                }
                finally
                {
                    server.RemoveClient(info.id);
                }
            }));
        }