private void OnReceive(IAsyncResult ar) { Client client = (Client)ar.AsyncState; //из массива байт в Data объект Received = new Data(byteData); try { switch (Received.cmdCommand) { case Command.Login: dataContext.SetContext(clientLogin); break; case Command.Registration: dataContext.SetContext(clientRegistration); break; case Command.SendActivationCode: dataContext.SetContext(clientReSendActivCode); break; case Command.Logout: dataContext.SetContext(clientLogout); break; case Command.Message: dataContext.SetContext(clientMessage); break; case Command.privMessage: dataContext.SetContext(clientPrivateMessage); break; case Command.List: dataContext.SetContext(clientListManager); break; case Command.manageFriend: dataContext.SetContext(manageClientFriend); break; default: throw new ArgumentException("Wrong Package command from client"); } dataContext.Load(client, Received, ListOfClientsOnline, ChannelsList); dataContext.Execute(); dataContext.Response(); ReceivedMessage(client, Received, byteData); } catch (Exception ex) { clientLogout.Send.cmdCommand = Command.Logout; clientLogout.Send.strName = Client.strName; clientLogout.Load(client, Received, ListOfClientsOnline, ChannelsList); clientLogout.Execute(); string exMessage = "client: " + client.strName + " " + ex.Message; Console.WriteLine(exMessage); servLogger.Log(exMessage); clientLogout.Response(); } }
private void OnReceive(IAsyncResult ar) { // Retrieve the client and the handler socket // from the asynchronous client. Client client = (Client)ar.AsyncState; //Transform the array of bytes received from the user into an //intelligent form of object Data Received = new Data(byteData); try { switch (Received.cmdCommand) { case Command.Login: dataContext.SetContext(clientLogin); break; case Command.Registration: dataContext.SetContext(clientRegistration); break; case Command.changePassword: dataContext.SetContext(clientChangePassword); break; case Command.lostPassword: dataContext.SetContext(clientLostPassword); break; case Command.SendActivationCode: dataContext.SetContext(clientReSendActivCode); break; case Command.Logout: dataContext.SetContext(clientLogout); break; case Command.Message: dataContext.SetContext(clientMessage); break; case Command.privMessage: dataContext.SetContext(clientPrivateMessage); break; case Command.createChannel: dataContext.SetContext(clientCreateChannel); break; case Command.joinChannel: dataContext.SetContext(clientJoinChannel); break; case Command.exitChannel: dataContext.SetContext(clientExitChannel); break; case Command.editChannel: // TODO ALL break; case Command.deleteChannel: dataContext.SetContext(clientDeleteChannel); break; case Command.enterChannel: dataContext.SetContext(clientEnterChannel); break; case Command.leaveChannel: dataContext.SetContext(clientLeaveChannel); break; case Command.List: dataContext.SetContext(clientListManager); break; case Command.manageFriend: dataContext.SetContext(manageClientFriend); break; case Command.ignoreUser: dataContext.SetContext(clientIgnoreUser); break; case Command.kick: dataContext.SetContext(clientKick); break; case Command.ban: dataContext.SetContext(clientBan); break; case Command.kickUserChannel: dataContext.SetContext(clientKickFromChannel); break; case Command.banUserChannel: dataContext.SetContext(clientBanFromChannel); break; case Command.sendFile: if (Received.strFileMsg != null) { dataContext.SetContext(clientSendFile); } else { dataContext.SetContext(clientSendFileInfo); } break; default: throw new ArgumentException("Wrong Package command from client"); } dataContext.Load(client, Received, ListOfClientsOnline, ChannelsList); dataContext.Execute(); dataContext.Response(); ReceivedMessage(client, Received, byteData); } catch (Exception ex) { // So we make sure that client which got crash or internet close, server will send log out message clientLogout.Send.cmdCommand = Command.Logout; clientLogout.Send.strName = Client.strName; clientLogout.Load(client, Received, ListOfClientsOnline, ChannelsList); clientLogout.Execute(); string exMessage = ("client: " + client.strName + " " + ex.Message); Console.WriteLine(exMessage); //Console.WriteLine(ex.StackTrace); servLogger.Log(exMessage); clientLogout.Response(); } }