private void toolStripButton_addClient_Click(object sender, EventArgs e) { var clientProfile = new ClientProfile { IsEdit = false }; var cpiNew = new ClientProfileInfo { Id = Guid.NewGuid().ToString() }; clientProfile.ClientProfileInfo = cpiNew; clientProfile.ShowDialog(); if (clientProfile.Saved) { var foundName = (from TreeNode treeNode in treeView_clients.Nodes select(ClientProfileInfo) treeNode.Tag).Any(clientProfileInfo => string.Compare(clientProfileInfo.ClientName, clientProfile.ClientProfileInfo.ClientName, StringComparison.OrdinalIgnoreCase) == 0 && clientProfileInfo.Id != clientProfile.ClientProfileInfo.Id); if (foundName) { MessageBox.Show(this, @"Unable to save the company profile; name already exists!", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { foreach (var activityType in settings.ActivitiesTypes) { var clientActivityType = new ClientActivityType { Id = Guid.NewGuid().ToString(), IdActivity = activityType.Id, Activated = true, HourlyRateClient = activityType.HourlyRate, HourlyRateAdjustment = 0 }; clientProfile.ClientProfileInfo.ClientActivities.Add(clientActivityType); } settings.Clients.Add(clientProfile.ClientProfileInfo); AddCompanyToList(clientProfile.ClientProfileInfo); } } label_clientCount.Text = @"Clients: " + treeView_clients.Nodes.Count; }
//////////////////////////////////////////////////// 서버와의 통신 //////////////////////////////////////////////////// private void GetRequest() //서버로부터 받은 요청을 처리하는 쓰레드 메소드 { while (true) { stream = clientSocket.GetStream(); //스트림 읽음 int bytes = stream.Read(this.readbuffer, 0, this.readbuffer.Length); Packet packet = (Packet)Packet.Deserialize(this.readbuffer); switch ((int)packet.Type) { case (int)PacketType.메세지: { ClientMessage clientMessage = new ClientMessage(); clientMessage = (ClientMessage)Packet.Deserialize(this.readbuffer); DisplayText(clientMessage.Message, Color.Black); //텍스트창에 띄움 break; } case (int)PacketType.그림정보: { ClientDrawingInfo drawInfo = new ClientDrawingInfo(); drawInfo = (ClientDrawingInfo)Packet.Deserialize(this.readbuffer); //로컬에서 테스트할때 이름 안 겹치게하려고.. fileStrm = new FileStream(filepath + "turnPic_" + client_number + ".jpg", FileMode.Create, FileAccess.Write); break; } case (int)PacketType.그림: { ClientDrawing draw = new ClientDrawing(); draw = (ClientDrawing)Packet.Deserialize(this.readbuffer); string fileName = null; //클라이언트로부터 받은 파일을 쓴다. if (fileStrm != null) { fileStrm.Write(draw.buffer, 0, draw.buffer.Length); countRead++; if (countRead == draw.count) { fileName = fileStrm.Name; fileStrm.Close(); fileStrm = null; countRead = 0; //picture박스에 그림표시해야함. FileStream fs = new FileStream(filepath + "turnPic_" + client_number + ".jpg", FileMode.Open, FileAccess.Read); gamePicture.Image = System.Drawing.Image.FromStream(fs); fs.Close(); } } break; } case (int)PacketType.프로필정보: { ClientProfileInfo profileInfo = new ClientProfileInfo(); profileInfo = (ClientProfileInfo)Packet.Deserialize(this.readbuffer); fileStrm = new FileStream(filepath + client_number.ToString() + "-" + profileInfo.clientNum.ToString() + ".jpg", FileMode.Create, FileAccess.Write); break; } case (int)PacketType.게임상태: { GameState statePacket = new GameState(); statePacket = (GameState)Packet.Deserialize(this.readbuffer); DisplayText(statePacket.message, Color.Red); gameStart = statePacket.gameStart; if (!gameStart) { settingTurnChange(-1); System.Threading.Thread.Sleep(2000); Next_Form(); } break; } case (int)PacketType.턴: { TurnChange turnPacket = new TurnChange(); turnPacket.turnCount = turnCount; turnPacket = (TurnChange)Packet.Deserialize(this.readbuffer); turnReceived(turnPacket.turn, turnPacket.Word, turnPacket.message, turnPacket.clientscore); break; } case (int)PacketType.프로필: { ClientProfile profile = new ClientProfile(); profile = (ClientProfile)Packet.Deserialize(this.readbuffer); string fileName = null; //클라이언트로부터 받은 파일을 쓴다. if (fileStrm != null) { fileStrm.Write(profile.buffer, 0, profile.buffer.Length); countRead++; if (countRead == profile.count) { fileName = fileStrm.Name; fileStrm.Close(); fileStrm = null; countRead = 0; if (profile.clientNum > client_number) { switch (profile.clientNum) { case 1: this.Invoke(new MethodInvoker(delegate() { nickNameList.Add(profile.nickName); })); break; case 2: this.Invoke(new MethodInvoker(delegate() { nickNameList.Add(profile.nickName); })); break; case 3: this.Invoke(new MethodInvoker(delegate() { nickNameList.Add(profile.nickName); })); break; } } setProfile(profile.clientNum); } } break; } case (int)PacketType.초기화: { Init init = new Init(); init = (Init)Packet.Deserialize(this.readbuffer); client_number = init.clinetNumber; //자신의 클라이언트 넘버 초기화 break; } case (int)PacketType.닉네임: //6.13 초기화랑 닉네임 바꿈 -> initReceive함수 옮김 { NickName nick_name = new NickName(); nick_name = (NickName)Packet.Deserialize(this.readbuffer); initReceived(nick_name.nickNameList, nick_name.client_sum); break; } } } }
private void AddCompanyToList(ClientProfileInfo clientProfileInfo) { var treeNode = treeView_clients.Nodes.Add(clientProfileInfo.ClientName); treeNode.Tag = clientProfileInfo; }
public void SendProfileAll(string nickName, int cli_num) { //모든 클라이언트 리스트를 탐색 string fileName = null; foreach (var pair in clientList) { TcpClient client = pair.Key as TcpClient; ClientProfile clientProfile = new ClientProfile(); ClientProfileInfo profileInfo = new ClientProfileInfo(); profileInfo.Type = (int)PacketType.프로필정보; clientProfile.Type = (int)PacketType.프로필; NetworkStream stream = client.GetStream(); //스트림에서 얻고 //클라이언트가 새로 들어오면, 모든 클라이언트들에게 새 이미지를 보낸다. profileInfo.clientNum = cli_num; fileName = Environment.CurrentDirectory + "\\Server\\bin\\Debug\\" + cli_num.ToString() + ".jpg"; Packet.Serialize(profileInfo).CopyTo(this.sendbuffer, 0); stream.Write(this.sendbuffer, 0, this.sendbuffer.Length); stream.Flush(); resetBuffer(sendbuffer); FileInfo file = new FileInfo(fileName); FileStream fileStrm = new FileStream(file.FullName, FileMode.Open, FileAccess.Read); BinaryReader reader = new BinaryReader(fileStrm); int count = (int)(file.Length) / (1024) + 1; for (int j = 0; j < count; j++) { clientProfile.buffer = reader.ReadBytes(1024); clientProfile.count = count; clientProfile.nickName = nickName; clientProfile.Type = (int)PacketType.프로필; clientProfile.clientNum = cli_num; Packet.Serialize(clientProfile).CopyTo(this.sendbuffer, 0); stream.Write(this.sendbuffer, 0, this.sendbuffer.Length); stream.Flush(); resetBuffer(sendbuffer); } fileStrm.Close(); //새로 들어온 애는 기존 녀석들까지 보내줘야 한다. if (clientNum[client] == cli_num) { for (int i = 0; i < cli_num; i++) { profileInfo.clientNum = i; fileName = Environment.CurrentDirectory + "\\Server\\bin\\Debug\\" + i.ToString() + ".jpg"; Packet.Serialize(profileInfo).CopyTo(this.sendbuffer, 0); stream.Write(this.sendbuffer, 0, this.sendbuffer.Length); stream.Flush(); for (int j = 0; j < 1024 * 4; j++) { sendbuffer[j] = 0; } file = new FileInfo(fileName); fileStrm = new FileStream(file.FullName, FileMode.Open, FileAccess.Read); reader = new BinaryReader(fileStrm); count = (int)(file.Length) / (1024) + 1; for (int j = 0; j < count; j++) { clientProfile.buffer = reader.ReadBytes(1024); clientProfile.count = count; clientProfile.nickName = nickName; clientProfile.Type = (int)PacketType.프로필; clientProfile.clientNum = i; Packet.Serialize(clientProfile).CopyTo(this.sendbuffer, 0); stream.Write(this.sendbuffer, 0, this.sendbuffer.Length); stream.Flush(); resetBuffer(sendbuffer); } fileStrm.Close(); } } } }
private void TrackProjectActivity_Load(object sender, EventArgs e) { IsLoading = true; if (IsMerge) { Text += @" (Merge)"; } else { Text += IsEdit ? " (Edit)" : " (New)"; } #region | get company profile | foreach (var clientProfileInfo in Tracked.Preferences.Clients) { if (clientProfileInfo.Id != Project.ClientId) { continue; } Client = clientProfileInfo; break; } #endregion textBox_client.Text = Client != null ? Client.ClientName : "[no client]"; initialize_projects_combobox(); #region | set project | var selectedProjectIndex = 0; for (var i = 0; i < comboBox_projects.Items.Count; i++) { var comboboxItem = (ComboboxItem)comboBox_projects.Items[i]; if (comboboxItem.Value == null) { continue; } var trackerProject = (TrackerProject)comboboxItem.Value; if (trackerProject.Id != Project.Id) { continue; } selectedProjectIndex = i; break; } comboBox_projects.SelectedIndex = selectedProjectIndex; #endregion initialize_activity_types_combobox(); #region | set activity type | var selectedTypeIndex = 0; for (var i = 0; i < comboBox_activity_type.Items.Count; i++) { var comboboxItem = (ComboboxItem)comboBox_activity_type.Items[i]; if (comboboxItem.Value == null) { continue; } var objs = (object[])comboboxItem.Value; Structures.ActivityType activityType = null; if (objs[0] != null) { activityType = (Structures.ActivityType)objs[0]; } ClientActivityType clientActivityType = null; if (objs[1] != null) { clientActivityType = (ClientActivityType)objs[1]; } if (Client != null) { if (clientActivityType == null) { continue; } if (clientActivityType.Id != Activity.ActivityTypeClientId) { continue; } selectedTypeIndex = i; break; } if (activityType != null && activityType.Id != Activity.ActivityTypeId) { continue; } selectedTypeIndex = i; break; } comboBox_activity_type.SelectedIndex = selectedTypeIndex; #endregion textBox_name.Text = Activity.Name; textBox_description.Text = Activity.Description; #region | dates/times | if (!IsEdit) { dateTimePicker_start_date.Value = DateTime.Now; dateTimePicker_start_hours.Value = DateTime.Now; dateTimePicker_end_date.Value = DateTime.Now; dateTimePicker_end_hours.Value = DateTime.Now; } else { dateTimePicker_start_date.Value = Activity.DateStart; dateTimePicker_start_hours.Value = Activity.DateStart; dateTimePicker_end_date.Value = Activity.DateEnd; dateTimePicker_end_hours.Value = Activity.DateEnd; } #endregion comboBox_status.SelectedItem = Activity.Status; checkBox_invoiced.Checked = Activity.Invoiced; dateTimePicker_date_invoiced.Value = Activity.InvoicedDate != Common.DateNull ? Activity.InvoicedDate : DateTime.Now; checkBox_billable.Checked = Activity.Billable; numericUpDown_hourly_rate_client.Value = Activity.HourlyRate; numericUpDown_quantity.Value = Activity.Quantity; label_total.Text = Math.Round(numericUpDown_quantity.Value * numericUpDown_hourly_rate_client.Value, 2).ToString(CultureInfo.InvariantCulture); textBox_name.Select(); checkBox_invoiced_CheckedChanged(null, null); CheckActivatedControls(); IsLoading = false; CheckAdjustment(); }