示例#1
0
        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();
            }
        }