public void ReceiveCommand(object obj) { Socket client = obj as Socket; string ClientIP = client.RemoteEndPoint.ToString().Split(':')[0]; Maytinhinfo maytinhinfo = maytinhInfoManager.Find(ClientIP); try { while (true) { byte[] buffer = new byte[Buffersize]; client.Receive(buffer); ServerResponse response = ServerResponse.Deserialize(buffer); switch (response.Type) { case ServerResponseType.SendDSCSDL: break; case ServerResponseType.SendListStudentExcel: break; case ServerResponseType.SendStudent: Student student = response.Data as Student; maytinhinfo.student = student; maytinhinfo.status = ClientinfoStatus.StudentConnected; if (_onClientListChanged != null) { _onClientListChanged(maytinhInfoManager.maytinh); } break; case ServerResponseType.SendMessage: break; case ServerResponseType.SendPcName: string pcname = response.Data as string; maytinhinfo.PCName = pcname; maytinhinfo.status = ClientinfoStatus.ClientConnected; if (_onClientListChanged != null) { _onClientListChanged(maytinhInfoManager.maytinh); } break; case ServerResponseType.DisconnectAll: break; case ServerResponseType.BeginExam: break; case ServerResponseType.FinishExam: FileContainer savefilebaithi = response.Data as FileContainer; string savepath = this.serverpath; if (!Directory.Exists(savepath)) { Directory.CreateDirectory(savepath); } string fileName = savefilebaithi.FileInfo.Name; string fullPath = Path.Combine(savepath, fileName); byte[] fileContent = savefilebaithi.FileContent; using (var fileStream = File.Create(fullPath)) fileStream.Write(fileContent, 0, fileContent.Length); break; case ServerResponseType.LockClient: break; case ServerResponseType.Undefined: break; default: break; } } } catch (Exception) { maytinhinfo.status = ClientinfoStatus.Disconnected; if (_onClientListChanged != null) { _onClientListChanged(maytinhInfoManager.maytinh); } ListClient.Remove(client); client.Close(); } }